Reputation: 10656
I need to color the cell if the value of the cell is greater than 80. For example, given this data frame called 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] should be in red color. I was able to change the color of the text by something like this using xtable:
df[, 2] = ifelse(df[, 2] > 80, paste("\\color{red}{", round(df[, 2], 2), "}"), round(df[, 2], 2))
If I do this and print out the table with kable, it wont print out. Any ideas how can I color the cell in kable output table?
Upvotes: 5
Views: 19800
Reputation:
Another solution using my huxtable
package:
library(huxtable)
ht <- as_hux(df)
ht <- set_background_color(ht, where(ht > 80), "red")
ht
Upvotes: 5
Reputation: 7856
In fact, you don't even need DT
or kableExtra
if all you need is the color of that cell. However, as the author of kableExtra
, I do recommend that package though :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)
Upvotes: 14
Reputation: 28379
Not a knitr
solution...
You can modify specific cells with DT::datatable
formatStyle
. It has more display options and I'm using list(dom = "t")
to turn them off and ordering = FALSE
to remove sorting options from the top off the table.
library(magrittr)
library(DT)
df %>%
datatable(options = list(dom = "t", ordering = FALSE),
rownames = FALSE,
width = 10) %>%
formatStyle("CPU", backgroundColor = styleEqual(93, "red"))
If you prefer kable
way then you should try kableExtra
. They have option to change background for specified rows.
Upvotes: 6