如何在knitr中更改kable输出表中单元格的颜色

use*_*980 2 r conditional-formatting knitr kable

如果单元格的值大于80,我需要为单元格着色.例如,给定此数据框称为df:

dput(df)

structure(list(Server = structure(1:2, .Label = c("Server1", 
"Server2"), class = "factor"), CPU = c(79.17, 93), UsedMemPercent = c(16.66, 
18.95)), .Names = c("Server", "CPU", "UsedMemPercent"), row.names = c(NA, 
-2L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

df [2,2]应为红色.我能够使用xtable通过类似的方式更改文本的颜色:

df[, 2] = ifelse(df[, 2] > 80, paste("\\color{red}{", round(df[, 2], 2), "}"), round(df[, 2], 2))
Run Code Online (Sandbox Code Playgroud)

如果我这样做并用kable打印出桌子,它就不会打印出来.任何想法如何在kable输出表中为单元格着色?

Hao*_*Hao 8

事实上,你甚至不需要DT或者kableExtra你需要的只是那个细胞的颜色.但是,作为作者kableExtra,我确实推荐这个包:P

# What u have now
df <-structure(list(Server =structure(1:2, .Label =c("Server1","Server2"), class = "factor"), CPU =c(79.17, 93), UsedMemPercent =c(16.66,18.95)), .Names =c("Server", "CPU", "UsedMemPercent"), row.names =c(NA,-2L), class = "data.frame")
df[, 2] =ifelse(df[, 2]>80,paste("\\color{red}{",round(df[, 2], 2), "}"),round(df[, 2], 2))
# What you need
kable(df, "latex", escape = F)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


PoG*_*bas 5

不是knitr解决方案...
您可以使用修改特定的单元格DT::datatable formatStyle。它具有更多显示选项,我正在list(dom = "t")关闭它们并ordering = FALSE从表的顶部删除排序选项。

library(magrittr)
library(DT)
df %>%
    datatable(options = list(dom = "t", ordering = FALSE), 
              rownames = FALSE,
              width = 10) %>%
    formatStyle("CPU", backgroundColor = styleEqual(93, "red"))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如果您喜欢kable这种方式,则应该尝试一下kableExtra。他们可以选择更改指定行的背景


小智 5

使用我的huxtable包的另一个解决方案:

library(huxtable)
ht <- as_hux(df)
ht <- set_background_color(ht, where(ht > 80), "red")
ht
Run Code Online (Sandbox Code Playgroud)