R Использование kableExtra для раскрашивания ячеек и поддержания полосатого форматирования с вложенным if / ifelse? - PullRequest
0 голосов
/ 03 марта 2019

Расширение этого вопроса: 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 Ответ

0 голосов
/ 03 марта 2019

Вам не нужно применять форматирование к ячейкам, которые вы хотите оставить в покое.Так что просто проверьте это условие перед вызовом 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)
...