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

sym*_*ush 8 r knitr r-markdown 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")))
```
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

预期输出为:

col1 | col2
-------------
a    | one
     | two
b    | three
     | four
Run Code Online (Sandbox Code Playgroud)

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

sin*_*dur 7

如果你不介意使用kableExtra你绝对可以做到这一点,这是一个例子:

library(kableExtra)
knitr::kable(data.frame(col1 = c("a", "b"), col2 = linebreak(c("one\ntwo", "three\nfour"))),
             escape = FALSE)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

更多细节在这里


Rom*_*man 5

适用于标准表格的灵活双 HTML/PDF 的即发即弃解决方案。它结合了@snoram 概述的 kableExtra 的换行功能。
假设:您<br>用作换行指示器。

```{r}
knit_table(df1)
```
Run Code Online (Sandbox Code Playgroud)

图片

代码

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)  
  }
}
Run Code Online (Sandbox Code Playgroud)

数据

df1 <- data.frame(col1 = c("a", "b"),
                  col2 = c("one<br>two", "three<br>four"))
Run Code Online (Sandbox Code Playgroud)

  • 感谢@Roman 这个极其简单的解决方案。这正是我正在寻找的,因为 \n 是我可以轻松更改为 &lt;br&gt; 的选择。然而,这仅适用于 html 输出,至少对我而言。它也适用于您的 pdf 输出吗? (2认同)