根据单元格值使用kableExtra为行着色

时间:2018-11-16 15:45:52

标签: r r-markdown knitr kable kableextra

我结合使用R markdown和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()

但这只会更改圆柱列中的值,而不会更改其余行中的值。

是否可以解决我的问题(最好不要为每个样式选项都指定条件)?

编辑: 这是与this one不同的问题,在{{3}}中,有人想根据该列中的值来格式化该列,但希望排除某些行/条目。我不想排除任何行,但是我希望格式应用于整个行(仍以特定列中的值为条件)。

1 个答案:

答案 0 :(得分:2)

我认为最简单的方法是根据您的条件传递要着色的行列表。

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")