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输出表中为单元格着色?
事实上,你甚至不需要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)
不是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)