Как изменить шрифт (полужирный / курсив) для ячейки в таблице kable в rmarkdown?
Есть ли способ отформатировать одну ячейку в таблице в rmarkdown? Я использую Kable для генерации таблицы следующим образом:
library(knitr)
kable(data.frame(c('a','b','c'),c(1,2,3)))
Я хочу выделить жирным шрифтом "с" в последнем ряду, а также добавить горизонтальную линию в конце таблицы. Есть указатели?
2 ответа
Подсветка ячеек, строк или столбцов pander
довольно просто:
> df <- data.frame(c('a','b','c'),c(1,2,3))
> emphasize.strong.cells(which(df == 3, arr.ind = TRUE))
> pander(df)
-------------------------------
c..a....b....c.. c.1..2..3.
------------------ ------------
a 1
b 2
c **3**
-------------------------------
Но добавление горизонтальной линии к таблице выходит за рамки спецификаций таблицы уценки.
Просто обобщая вопрос, чтобы включить другие лица шрифта. Pandoc предлагает другие способы легкого переформатирования текста, как описано в RMarkdown Cheatsheet:
- курсив может быть достигнут с помощью
*italics*
- жирным шрифтом можно добиться, используя
**bold**
- зачеркивание может быть достигнуто с помощью
~~strikethrough~~
Этот вывод будет поддерживать различные методы вывода, включая PDF, HTML и Word:
Вот основной пример:
---
output: pdf_document: default
---
```{r}
knitr::kable(data.frame(char = c('*a*','**b**','~~c~~'),
num = c(1,2,3)))
```
Применение форматирования с функцией
Чтобы упростить выбор ячеек для переформатирования, я собрал следующую функцию format_cells
,
format_cells <- function(df, rows ,cols, value = c("italics", "bold", "strikethrough")){
# select the correct markup
map <- setNames(c("*", "*", "~~"), c("italics", "bold", "strikethrough"))
markup <- map[value]
for (r in rows){
for(c in cols){
# Make sure values are not factors
df[[c]] <- as.character( df[[c]])
# Update formatting
df[r, c] <- paste0(markup, df[r, c], markup)
}
}
return(df)
}
Это позволяет пользователю выбрать строку и столбцы ячейки, которые необходимо переформатировать, и выбрать стиль для применения. Несколько ячеек могут быть выбраны одновременно, если необходимо переформатировать несколько значений в строке / столбце. Вот пример:
library(tidyverse)
df <- data.frame(char = c('a','b','c'),
num = c(1,2,3))
df %>%
format_cells(1, 1, "italics") %>%
format_cells(2, 2, "bold") %>%
format_cells(3, 1:2, "strikethrough") %>%
knitr::kable()
Дальнейшее чтение:
kableExtra
Пакет был написан, чтобы предложить множество дополнительных элементов управления стилями таблиц. Тем не менее, рекомендации разные для разных типов вывода, и поэтому существуют разные подходы для HTML и LaTeX.
Это также работает: первый аргумент - это номер строки, поэтому вы можете программно выделить строки или столбцы жирным шрифтом, используя column_spec.
library(kableExtra)
library(tidyverse)
kable(data.frame(letter =c('a','b','c'),number =c(1,2,3)))%>%
kable_styling()%>%
row_spec(3,bold=T,hline_after = T)