在r markdown中包装pandoc表列名

时间:2016-03-25 14:48:35

标签: r markdown r-markdown pandoc

我正在创建一个带有长列名的pandoc.table,我要包装,所以我的表不会脱离pdf页面。我知道你可以使用split.tables,但这会消除表格的清晰度。使用split.cells似乎没有做任何事情,即使作为向量提供。

---
  output : pdf_document
---

```{r,echo=FALSE, results="asis"}
library(pander)
mytab = data.frame(ReallySuperExtraLongColumnNameThatIWantToWrap=1:2, col2=2001:2002)
pandoc.table(mytab)
``` 

1 个答案:

答案 0 :(得分:6)

以下将在标题中生成一个包含换行符的表:

```{r,echo=FALSE, results="asis"}
library(pander)
mytab = data.frame("ReallySuperExtraLongColumn\nNameThatIWantToWrap"=1:2,
                  col2=2001:2002,
                  check.names = FALSE)
pandoc.table(mytab)
``` 

换行符使用\n进行编码。这不是列名中允许的字符,data.frame()函数通常会将其删除。您可以使用check.names = FALSE来抑制此行为,并使列名完全按照您输入的名称保留。或者,您可以在单独的行中重新定义列名称:

mytab = data.frame(ReallySuperExtraLongColumnNameThatIWantToWrap=1:2, col2=2001:2002)
names(mytab)[1] = "ReallySuperExtraLongColumn\nNameThatIWantToWrap"

您还可以使用split.cells设置单元格的宽度。然后会自动生成换行符,但只有在列标题中有空格时才会出现换行符。一个例子:

```{r,echo=FALSE, results="asis"}
library(pander)
mytab = data.frame("Really Super Extra Long Column Name That I Want To Wrap"=1:2,
                  col2=2001:2002,
                  check.names = FALSE)
pandoc.table(mytab, split.cells = 15)
``` 

这会在" Extra"之后给出休息。和"姓名"。请注意,您仍然需要check.names = FALSE,因为数据框名称中也不允许使用空格。