4

如果单元格的值大于 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")

df[2,2] 应该是红色的。我可以使用 xtable 通过以下方式更改文本的颜色:

df[, 2] = ifelse(df[, 2] > 80, paste("\\color{red}{", round(df[, 2], 2), "}"), round(df[, 2], 2))

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

4

3 回答 3

11

实际上,您甚至不需要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)

在此处输入图像描述

于 2017-09-15T15:43:10.310 回答
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"))

在此处输入图像描述

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

于 2017-09-15T15:00:46.250 回答
5

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

library(huxtable)
ht <- as_hux(df)
ht <- set_background_color(ht, where(ht > 80), "red")
ht
于 2017-09-22T17:57:51.910 回答