【问题标题】:Align two data.frames next to each other with knitr?将两个相邻的data.frames与knitr对齐?
【发布时间】:2013-07-18 07:33:10
【问题描述】:

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

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

【问题讨论】:

  • 你使用的是markdown还是LaTeX?如果是后者,您会接受使用 LaTeX 表的解决方案吗?
  • 到目前为止,我使用的是降价。我还没有使用 LaTeX。
  • 如果你使用一点 CSS/HTML 是可能的;由于您对情节方法感到满意,因此我不会发布另一个答案
  • @Yihui 我懂一点 CSS/HTML,所以如果你不介意的话,我想看看你的方法。

标签: r knitr


【解决方案1】:

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

您还可以使用 style="float: [left|right]" 等 CSS 技巧将表格向左/向右浮动。

如果要设置单元格内边距和间距,可以照常使用表格属性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 了解上述代码。

【讨论】:

  • 谢谢!有了这个,我可以做我想做的事,而不必为正确放置桌子而奋斗。
  • 有什么方法可以影响 kable 中的单元格填充和间距?我的数据框的一列有名称,另一列有个位数的数字,它们靠得太近,阅读起来不方便。
  • 我们如何在代码中添加style="float: [left|right]"?谢谢。
【解决方案2】:

您会满足于 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)
```

【讨论】:

  • 太棒了,谢谢!我必须摆弄它才能在较短的(只有 7 行)旁边完成较长的 df(48 行),但它看起来很有希望。 :-)
  • 这太棒了!你知道我怎样才能让 2 个表在同一点开始吗?
猜你喜欢
  • 2012-05-21
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 1970-01-01
  • 2022-11-01
  • 2021-08-30
  • 1970-01-01
相关资源
最近更新 更多