Как изменить шрифт (полужирный / курсив) для ячейки в таблице 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)
Другие вопросы по тегам