【问题标题】:wrapping wide table in rmarkdown在 rmarkdown 中包装宽表
【发布时间】:2019-03-17 14:49:27
【问题描述】:

我有一个非常宽的表格(超过 300 列),并希望通过包装列来显示它。在示例中,我将只使用 100 列。

我想到的是重复使用 kable 来显示表格的子集:

library(kableExtra)
set.seed(1)
data = data.frame(matrix(rnorm(300, 10, 1), ncol = 100))

kable(data[, 1:5], 'latex', booktabs = T) 
kable(data[, 6:10], 'latex', booktabs = T) 
kable(data[, 11:15], 'latex', booktabs = T) 

但这显然很乏味...我知道有缩小选项,但由于我有这么多列,这不可能。

我可以在 kable 中调整任何参数来实现它吗?


更新: @jay.sf 的答案似乎运作良好,但在这里并没有产生相同的结果。相反,我得到了一些简单的代码 - 你能再看看,让我知道我可以在哪里改进吗?谢谢!

我的sessionInfo() 是:R version 3.5.1 (2018-07-02)rmarkdown::pandoc_version()1.19.2.1

【问题讨论】:

  • 要获得纯 LaTeX 代码,我们必须使用 catsapply 给出了一个有趣的输出,因此我们应用了 for 循环,请参阅我的编辑,现在应该可以正常工作了。

标签: r latex r-markdown kable


【解决方案1】:

这个问题实际上比我乍看之下想的要棘手。我使用了一些 tidyverse 函数,特别是 dplyr::select 来获取列,purrr::map 沿着列索引组移动。

我的想法是制作一个列索引向量列表以供选择,例如第一个列表项是1:20,第二个是21:40,以此类推,以便将数据分成20个每个 5 列的表格(您使用的数字可以是 ncol(data) 的不同因子)。我低估了做这件事的工作,但从an old SO post 得到了想法,将数字 1 到 20 沿列数表示,对其进行排序,并将其用作分组,然后拆分列。

然后这些向量中的每一个都成为select 中的列索引。生成的数据帧列表每个都被传递给knitr::kablekableExtra::kable_styling。把东西放在那里也会得到map的默认打印名称,这并不理想,所以我添加了对purrr::walk的调用以整齐地打印它们。

另请注意,以这种方式制作kable'd 表意味着将results="asis" 放入块选项中。

---
title: "knitr chunked"
output: pdf_document
---

```{r include=FALSE}
library(knitr)
library(kableExtra)
library(dplyr)
library(purrr)

set.seed(1)
data = data.frame(matrix(rnorm(300, 10, 1), ncol = 100))
```

```{r results='asis'}
split(1:ncol(data), sort(rep_len(1:20, ncol(data)))) %>%
  map(~select(data, .)) %>%
  map(kable, booktabs = T) %>%
  map(kable_styling) %>%
  walk(print)
```

PDF 输出顶部:

【讨论】:

  • 只是想指出,我最初将其分成 7 列的 15 个表格,只是因为表格在 PDF 页面中的大小相当整齐,但决定更改为 20 个表格每列 5 列,以更好地适应您所描述的内容。代码和输出都会更新以匹配。
【解决方案2】:

您可以使用包含列号的矩阵,并将其放入带有 cat 函数的 for 循环中。

---
output: pdf_document
---

```{r, results="asis", echo=FALSE}
library(kableExtra)
set.seed(1)
dat <- data.frame(matrix(rnorm(300, 10, 1), ncol=100))

m <- matrix(1:ncol(dat), 5)

for (i in 1:ncol(m)) {
 cat(kable(dat[, m[, i]], 'latex', booktabs=TRUE), "\\newline")
}
```

结果

【讨论】:

  • 您好,谢谢您的回复。奇怪的是,我复制并粘贴了您的代码,但在我的 pdf 文件中没有产生相同的结果。它没有以 kable 表的形式显示,而是以普通代码的形式显示。我更新了问题描述中的屏幕截图。
  • 奇怪,@RachelZhang,当我没有在我运行代码的块(Ref.)中指定选项results="asis" 时,这正是发生在我身上的事情,你能检查一下吗?否则,您能否发布您的sessionInfo()rmarkdown::pandoc_version(),以及您安装了哪个 LaTeX 发行版和版本?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 2015-04-04
  • 2021-10-06
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 2016-04-19
相关资源
最近更新 更多