table KableExtra() 中的有条件颜色行

Conditionally color rows in table KableExtra()

我想使用 kableExtra 有条件地用数据格式化 table。

让我们使用鸢尾花数据集作为代表。另外,假设我想根据物种为行着色。

这是我尝试使用的代码 - 文档中的示例:

iris %>% mutate(Species = cell_spec(Species, color = spec_color(1:10, option = "A"), link = "#",tooltip = paste0("Sepal Length: ", Sepal.Length))) %>% kable("html", escape = F, align = "c") %>% kable_styling("condensed", full_width = F)

但是它不会根据物种对行进行着色。有人可以帮忙吗?

不确定 spec_color 是文档中的正确函数: “spec_color 会将连续变量映射到任何绿色调色板。”;

您希望将离散变量映射到所有变量。

这可能是一种方法:

(注意:如果要为背景着色,请将“颜色”替换为“背景”。)

已修改以包含 OP 的评论以控制颜色顺序。

library(kableExtra)
library(dplyr)

# make a minimal data frame:

iris1 <- 
  iris %>%
  group_by(Species) %>% 
  slice_head(n = 4) %>% 
  ungroup()

 iris1 %>% 
  mutate(across(everything(), ~cell_spec(.x, color = factor(iris1$Species, labels =  c("red", "green", "blue")),
                                         link = "#",
                                         tooltip = paste0("Sepal Length: ", Sepal.Length)))) %>%
   kable("html", escape = F, align = "c") %>% 
   kable_styling("condensed", full_width = F)

这导致:

要控制颜色顺序,请根据需要操纵因子水平和标签,例如:

   iris1 %>% 
  mutate(across(everything(), ~cell_spec(.x, color = factor(iris1$Species, 
                                                            levels = c("versicolor", "setosa", "virginica"),
                                                            labels =  c("red", "green", "blue")),
                                         link = "#",
                                         tooltip = paste0("Sepal Length: ", Sepal.Length)))) %>% 
   kable("html", escape = F, align = "c") %>% 
   kable_styling("condensed", full_width = F)