繁体   English   中英

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

[英]wrap text in knitr::kable table cell using “\n”

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


我想生成一个包含一些表的.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)

在此输入图像描述

更多细节在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM