2013-07-18 67 views
8

我是新來的knitr(對於R也很新),所以這可能是一個愚蠢的問題...我有兩個data.frames,它們都有兩列,但行數不同。我想在我的編織報告中展示他們,但是當他們可以很容易地坐在一起時,在另一張狹窄的桌子下面放置一張窄桌子看起來不太好。 有沒有什麼辦法可以彼此相鄰顯示?使用knitr對齊兩個數據幀?

更新

好吧,基於下面的建議,這是我做了(我把三個表在一起現在):

```{r fig.height=13.5, fig.width=10, echo=FALSE, comment=""} 
grid.arrange(textGrob("Visual Clusters", gp=gpar(fontsize=14, fontface="bold")), 
      textGrob("We have biofilm data for...", gp=gpar(fontsize=14, fontface="bold")), 
      textGrob("Left Over Isolates", gp=gpar(fontsize=14, fontface="bold")), 
      tableGrob(clusters, show.rownames=FALSE, gp=gpar(fontsize=10)), 
      tableGrob(clust_ab, show.rownames=FALSE, gp=gpar(fontsize=10)), 
      tableGrob(n_clust, show.rownames=FALSE, gp=gpar(fontsize=10)), 
      ncol=3, nrow=2, heights=c(1,30)) 
``` 

這看起來已經真的很好,有標題爲三個表格和沒有編號的行。
到目前爲止,我唯一無法解決的問題是表格全都是水平居中的,所以如果你知道我的意思,那麼較短的表格會從最長的表格開始。

+0

您是使用markdown還是LaTeX?如果是後者,你是否願意用LaTeX桌子解決問題? –

+0

到目前爲止,我正在使用降價。我還沒有與LaTeX合作。 –

+0

如果你使用一點CSS/HTML,因爲你對情節方法感到滿意,所以我不會發表另一個答案 –

回答

12

開發版本knitr的(on Github;跟隨有安裝說明)具有kable()函數,它可以返回表作爲字符向量。您可以收集兩個表並將它們排列在父表的兩個單元格中。下面是一個簡單的例子:

```{r two-tables, results='asis'} 
library(knitr) 
t1 = kable(mtcars, format='html', output = FALSE) 
t2 = kable(iris, format='html', output = FALSE) 
cat(c('<table><tr valign="top"><td>', t1, '</td><td>', t2, '</td><tr></table>'), 
    sep = '') 
``` 

您還可以使用CSS的技巧,比如style="float: [left|right]"到表浮動到左/右。

如果要設置單元格填充和間距,可以像平常一樣使用表格屬性cellpadding/cellspacing,例如,

```{r two-tables, results='asis'} 
library(knitr) 
t1 = kable(mtcars, format='html', table.attr='cellpadding="3"', output = FALSE) 
t2 = kable(iris, format='html', table.attr='cellpadding="3"', output = FALSE) 
cat(c('<table><tr valign="top"><td>', t1, '</td>', '<td>', t2, '</td></tr></table>'), 
    sep = '') 
``` 

查看上述代碼的RPubs post

+0

謝謝!有了這個,我可以做到我想要的東西,而不必爲了把桌子擺放好而戰。 –

+0

是否有任何方法來影響單元格填充和間距?我的數據框在一列中有名字,而在另一列中有一位數字,並且它們太靠近在一起以便閱讀舒適。 –

+1

@ Lilith-Elina我已經更新了設置單元格填充的答案。 –

5

你會解決data.frames的「圖像」嗎?很顯然,我的解決方案很粗糙,可以隨意擺弄細節(例如,data.frames之間的間隔)。

Two data.frames, side by side 
======================================================== 

```{r} 
library(gridExtra) 
x <- data.frame(a = runif(5), b = runif(5)) 
y <- data.frame(a = runif(7), b = runif(7)) 

grid.arrange(tableGrob(x), tableGrob(y), ncol = 2) 
``` 

enter image description here

+0

太棒了,謝謝!我不得不擺弄那些讓更長的df(48行)完整地緊靠更短的(僅7行),但它看起來非常有前途。 :-) –

+0

這太棒了!你知道我怎麼能得到2表開始在同一點? – eliavs