R Использование kableExtra для раскрашивания ячеек и поддержания полосатого форматирования с помощью вложенного if/ifelse?
Расширение к этому вопросу: R хочет ограничить количество цифр из CSV-файла
Я использую kableExtra и cell_spec для раскрашивания ячеек с помощью вложенных операторов ifelse.
Вместо того, чтобы раскрашивать значения меньше чем.10 белый, я хочу оставить их в покое, чтобы позволить kableExtra применять полосатое форматирование.
У меня такое ощущение, что это невозможно, хотя из-за того, как применяются цвета фона?
DF:
DF <- data.frame(V1 = sample(letters,10,T), V2 = abs(rnorm(10)), V3 = abs(rnorm(10)))
Код:
library(magrittr)
library(kableExtra)
paint <- function(x) {
ifelse(x < 0.1, "white", ifelse(x < 0.2, "yellow", "red"))
}
DF[, -1] = lapply(DF[, -1], formatC, format = 'f', flag='0', digits = 2)
DF[,-1] = lapply(DF[,-1], function(x) cell_spec(x, background = paint(x), format = "latex"))
DF %<>%
mutate_if(is.numeric, function(x) {
cell_spec(x, background = paint(x), format = "latex")
})
kable(DF, caption = "colorized table with striping", digits = 2, format = "latex", booktabs = T, escape = F, longtable = T)%>%
kable_styling(latex_options = c("striped", "hold_position", "repeat_header", font_size = 6))%>%
landscape()%>%
row_spec(0, angle = 45)
Проблемная зона?
paint <- function(x) {
ifelse(x < 0.1, "white", ifelse(x < 0.2, "yellow", "red"))
}
это можно изменить, чтобы изменить цвет только между желтым (> =. 10<.2) и красным (>=. 2)? Или все условия должны быть определены?
Желаемый результат: полосатая таблица, которая только выделяет значения, как определено, позволяя полосам существовать со значениями меньше чем.10
1 ответ
Вам не нужно применять форматирование к ячейкам, которые вы хотите оставить в покое. Так что просто проверьте это условие перед вызовом cell_spec
(то есть, вызывайте cell_spec только для тех ячеек, которые вы хотите отформатировать):
paint <- function(x) ifelse(x < 0.2, "yellow", "red")
DF[,-1] = lapply(DF[,-1], formatC, format = 'f', digits = 2)
DF[,-1] = lapply(DF[,-1], function(x)
ifelse(x < 0.1, x, cell_spec(x, background = paint(x), format = "latex")))
kable(DF, caption = "Highlighted numbers near zero",
digits = 2, format = "latex", booktabs = T, escape = F, longtable = T) %>%
kable_styling(latex_options = c("striped", "hold_position",
"repeat_header", font_size = 6)) %>%
landscape() %>%
row_spec(0, angle = 45)