обернуть текст в ячейку таблицы knitr :: kable, используя \ n - PullRequest
0 голосов
/ 23 октября 2018

Как мне обернуть ячейку в ячейку таблицы 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, приветствуются, если они позволяют печатать (почти) так же красиво.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Если вы не возражаете против использования kableExtra, вы определенно можете достичь этого, вот один пример:

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

enter image description here

Подробнее здесь .

0 голосов
/ 23 октября 2018

Огненно-забытое решение для гибких двойных HTML / PDF стандартных таблиц.Он включает в себя функцию разрыва строки kableExtra, обозначенную @ snoram.
Предположение: вы используете <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"))
...