r - 使用 "\n"在 knitr::kable 表格单元格中包装文本

标签 r r-markdown knitr kable

如何将单元格包装在 knitr::kable 中使用 \n 的表格单元格?

我想生成一个 .rmd 文件,其中包含一些表格,其中一列需要文本换行。应该发生包裹的地方用\n标记。 .我试过(这是一个独立的 .rmd 文件):

---
output: pdf_document
---

## A Table with text wrap

```{r cars}
knitr::kable(data.frame(col1 = c("a", "b"), col2 = c("one\ntwo", "three\nfour")))
```

..但这不起作用。而不是留在col2 ,被包裹的部分位于 col1 的下一行.

enter image description here

预期输出为:
col1 | col2
-------------
a    | one
     | two
b    | three
     | four

使用除 knitr 以外的其他软件包的解决方案只要他们允许打印(几乎)一样好,就欢迎使用。

最佳答案

一劳永逸的解决方案 用于标准表格的灵活双 HTML/PDF。它结合了@snoram 概述的 kableExtra 的换行功能。
假设:您使用 <br>作为您的换行指标。

```{r}
knit_table(df1)
```

image

代码
library(dplyr)
library(knitr)
library(kableExtra)

knit_table <- function(df){
  if (is_html_output()) {
    df %>%
      kable("html", escape = F) %>%
      kable_styling()
  } else {
    df <- data.frame(lapply(df, function(x) {gsub("<br>", "\n", x)}), stringsAsFactors = F)

    df %>%  
      mutate_all(linebreak) %>%
      kable("latex", booktabs = T, escape = F)  
  }
}

数据
df1 <- data.frame(col1 = c("a", "b"),
                  col2 = c("one<br>two", "three<br>four"))

关于r - 使用 "\n"在 knitr::kable 表格单元格中包装文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52944533/

相关文章:

R根据属性删除重复的空间点

python - 仅在 R block 的情况下继承先前 block 中设置的变量(R markdown)

r-markdown - 是否有在 r studio 中创建 python block 的快捷方式?

r - 翻译 plotmath latex

r - 使用 R/knitr 自动生成 LaTeX Beamer 幻灯片

r - r 工作区中的最大对象数

R:减少功能。钠处理

用另一个替换一个正则表达式匹配,反之亦然

r-markdown - 在 RMarkdown 中自动编号部分

r - KableExtra 与 tableby 配合不佳