我想用R绘制一个表格,其中的单元格根据一些非平凡的逻辑进行格式化。 (例如,如果值是奇数,则将单元格涂成黄色;如果值也> 5,则将文本设为粗体等)。此逻辑将应用于动态创建的表的每一列,即列名未知,因此无法在代码中使用。
如果发现this JQuery方法很有用,但我不确定它是否能完全解决我的问题,而且我更喜欢基于R的方法。
我也使用condformat软件包接近了,但是由于某些原因,以下方法不起作用:
library(condformat)
data(iris)
# Create a condformat object
cf <- condformat(iris)
# Add rules to it:
for (col in colnames(iris)[1:2]) {
cf <- cf %>% rule_css(!!col,
expression = ifelse(eval(parse(text=col)) < 3.3, "red", "black"),
css_field = 'color')
}
# Render it
cf
结果表的第一列不遵守规则;而是使用第2列中的颜色。但是,如果我改为仅循环浏览第一列,则其颜色正确。
对于上述代码或一般问题的任何帮助,将不胜感激。
答案 0 :(得分:1)
kableExtra
是一个非常强大的工具,用于在R中创建HTML表。
library(kableExtra)
iris[1:10, 1:2] %>%
mutate(
Sepal.Length = cell_spec(
Sepal.Length,
"html",
background = ifelse(Sepal.Length %% 2 == 1, "yellow", "red"),
bold = ifelse(Sepal.Length > 5, T, F)
),
Sepal.Width = cell_spec(
Sepal.Width,
"html",
background = ifelse(Sepal.Width %% 2 == 1, "blue", "green"),
bold = ifelse(Sepal.Width > 10, T, F)
),
) %>%
kable(format = "html", escape = F) %>%
kable_styling("striped", full_width = F)
有关其他详细信息,请参阅文档:
Create Awesome HTML Table with knitr::kable and kableExtra
答案 1 :(得分:0)
为了在动态表上执行此操作,您可以像这样遍历data.frame的列(从Ozan147的答案中获取大部分代码):
library(kableExtra)
test <- iris[1:10, ]
for(i in 1:ncol(test)){
if(is.numeric(test[[i]])){
test[[i]] <- cell_spec(
test[[i]],
"html",
background = ifelse(test[[i]] %% 2 == 1, "yellow", "red"),
bold = ifelse(test[[i]] > 5, T, F)
)
}
}
test %>%
kable(format = "html", escape = F) %>%
kable_styling("striped", full_width = F)