Раскраска строк с помощью kableExtra на основе значений ячеек - PullRequest
0 голосов
/ 16 ноября 2018

Я использую уценку R в сочетании с LaTeX для создания отчетов в формате PDF. Для генерации таблиц я использую пакет kableExtra.

Я бы хотел изменить стиль строк на основе значений в определенном столбце. Я пробовал cell_spec, но, насколько я вижу, он изменяет только стиль значения в столбце, а не всю строку.

Например, в таблице ниже я бы хотел выделить все автомобили с более чем шестью цилиндрами. Таким образом, результат должен быть:

enter image description here

который я сделал с помощью следующего кода:

df %>% 
  kable(booktabs = T) %>%
  kable_styling() %>%
  row_spec(5, bold = T, color = "white", background = "red")

Здесь я указал номер строки, чего не хочу делать. Это должно быть решено автоматически в зависимости от количества цилиндров. Используя cell_spec, я могу получить следующее:

enter image description here

который я сделал с помощью следующего кода:

df %>%
  rownames_to_column('cars') %>% # used to store row names (mutate deletes them)
  mutate(
  cyl = cell_spec(cyl, color = ifelse(cyl > 6, "white", "black"),
                  background = ifelse(cyl > 6, "red", "white"),
                  bold = ifelse(cyl > 6, T, F))) %>%
  column_to_rownames('cars') %>% # used to put row names back in place
  kable(escape = F, booktabs = T) %>%
  kable_styling()

Но при этом изменяется только значение в столбце цилиндра, а не остальная часть строки.

Есть ли решение моей проблемы (желательно без указания условия для каждого варианта оформления)?

EDIT: Это другой вопрос, чем этот , где кто-то хочет отформатировать столбец на основе значений в этом столбце, но хочет исключить определенные строки / записи. Я не хочу исключать какие-либо строки, но я хочу, чтобы форматирование применялось ко всей строке (все еще с учетом значений в определенном столбце).

1 Ответ

0 голосов
/ 16 ноября 2018

Я думаю, что самый простой способ - передать список строк, которые нужно раскрасить, основываясь на ваших критериях.

library(kableExtra)

df<- mtcars
color.me <- which(df$cyl >6)

df %>% 
  kable(booktabs = T) %>%
  kable_styling() %>%
  row_spec(color.me, bold = T, color = "white", background = "red")

или в той же трубе, что и:

df %>% 
  kable(booktabs = T) %>%
  kable_styling() %>%
  row_spec(which(df$cyl >6), bold = T, color = "white", background = "red")
...