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&lt; .2)和红色(> =。2)之间,可以将其更改为仅更改颜色?还是必须定义所有条件?

所需的输出:仅突出显示定义的值的条纹表,使条纹在小于.10

的值上存在

您无需将任何格式应用于您希望独自留下的单元格。因此,只需在调用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)

最新更新