使用 "\n" 在 knitr::kable table 单元格中换行
wrap text in knitr::kable table cell using "\n"
如何使用 \n
将单元格包裹在 knitr::kable
table 单元格中?
我想生成一个包含一些 table 的 .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
.
的下一行
预期输出为:
col1 | col2
-------------
a | one
| two
b | three
| four
欢迎使用 knitr
以外的其他包的解决方案,只要它们允许打印(几乎)一样好。
一种即发即弃的解决方案,用于灵活的双HTML/PDF 标准表。它结合了 @snoram 概述的 kableExtra 的换行功能。
假设:您使用 <br>
作为换行符。
```{r}
knit_table(df1)
```
代码
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"))
如果你不介意使用 kableExtra
你绝对可以做到这一点,这里有一个例子:
library(kableExtra)
knitr::kable(data.frame(col1 = c("a", "b"), col2 = linebreak(c("one\ntwo", "three\nfour"))),
escape = FALSE)
更多详情here。
如何使用 \n
将单元格包裹在 knitr::kable
table 单元格中?
我想生成一个包含一些 table 的 .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
.
预期输出为:
col1 | col2
-------------
a | one
| two
b | three
| four
欢迎使用 knitr
以外的其他包的解决方案,只要它们允许打印(几乎)一样好。
一种即发即弃的解决方案,用于灵活的双HTML/PDF 标准表。它结合了 @snoram 概述的 kableExtra 的换行功能。
假设:您使用 <br>
作为换行符。
```{r}
knit_table(df1)
```
代码
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"))
如果你不介意使用 kableExtra
你绝对可以做到这一点,这里有一个例子:
library(kableExtra)
knitr::kable(data.frame(col1 = c("a", "b"), col2 = linebreak(c("one\ntwo", "three\nfour"))),
escape = FALSE)
更多详情here。