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))
```

这看起来已经很不错了,三个表的标题和没有编号的行。
到目前为止我无法解决的唯一问题是表格都是水平居中的,所以较短的表格从最长的表格开始,如果你知道我的意思的话。

4

2 回答 2

14

knitr 的开发版本(在 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 帖子。

于 2013-07-19T06:53:15.747 回答
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)
```

在此处输入图像描述

于 2013-07-18T08:48:30.780 回答