如何使用gt包基于另一列条件为单元格着色?现有代码未生效
解决gt包基于其他列条件的单元格着色问题
你当前代码的问题在于data_color()默认是根据目标列(cyl)的数值映射调色板,而非基于另一列(vs)的条件。仅通过rows参数指定vs == 0的行,无法同时覆盖vs == 1的场景,因此达不到预期效果。
下面提供两种可行的解决方案:
方案一:分两次调用data_color()
分别针对vs == 0和vs == 1的行设置颜色:
library(gt) library(dplyr) head(mtcars) %>% gt() %>% # 当vs为0时,cyl列单元格设为红色 data_color( columns = cyl, rows = vs == 0, colors = "red" ) %>% # 当vs为1时,cyl列单元格设为绿色 data_color( columns = cyl, rows = vs == 1, colors = "green" )
方案二:利用颜色因子映射一次性完成
通过scales::col_factor()创建基于vs列的颜色映射,指定apply_to参数关联目标列:
library(gt) library(dplyr) library(scales) head(mtcars) %>% gt() %>% data_color( columns = cyl, colors = col_factor( palette = c("red", "green"), domain = c(0, 1), levels = c(0, 1) ), apply_to = vs # 明确基于vs列的值应用颜色规则 )
第二种方案更简洁,适合多条件场景,col_factor()会根据vs的取值自动匹配对应的颜色,apply_to参数是核心,它告诉gt要参考哪一列的数值来应用颜色映射。
内容的提问来源于stack exchange,提问作者Quinten
相关产品推荐
相关产品推荐

