【问题标题】:Conditionally color rows in table KableExtra()有条件地为表 KableExtra() 中的行着色
【发布时间】:2021-12-10 08:32:10
【问题描述】:

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

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

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

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)

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

【问题讨论】:

  • 这是你必须用 Kable 做的事情还是你可以使用其他包?
  • 我更喜欢 Kable,因为它运行良好。我可以用它创建一个 html 和 pdf 报告。我尝试使用 formattable,但这导致我的配置出现问题。
  • 您要为行文本或行背景着色吗?
  • 我想给文本上色,而不是背景。

标签: r kableextra


【解决方案1】:

不确定spec_color 是正确的函数,来自文档: "spec_color 会将一个连续变量映射到任何 viridis 调色板。";

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

这可能是一种方法:

(注意:如果你想给背景上色,用“背景”代替“颜色”。)

修改为包含 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)

【讨论】:

  • 这有一个问题。例如,如果我提供这样的颜色向量: color_vec
  • 查看更新的答案。
猜你喜欢
  • 1970-01-01
  • 2015-06-11
  • 2020-03-02
  • 2015-12-14
  • 2021-07-16
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多