R语言gt包my_sum分组汇总行值大于0时设置黄色高亮方法
解决方案
gt的cells_summary()定位器原生支持按汇总行名称+单元格数值双层筛选,不需要额外改造数据源结构,只需要修改原有分组汇总样式的定位逻辑即可:
- 通过
summary = "my_sum"参数精准锁定所有分组下名为my_sum的汇总行,不会影响其他分组汇总行或全局汇总行 - 通过
rows参数传入逐单元格判断逻辑,仅选中数值大于0的单元格应用黄色填充
判断逻辑直接读取汇总计算后的原始数值,不受fmt_number()等格式化函数影响,不需要额外做格式转换。
完整可运行代码
library(gt) library(tidyverse) tibble(cars = c("honda", "honda", "ford", "ford"), mpg = c(24, 22, NA, NA), wt = c(NA, NA, 3432, 4234) ) %>% group_by(cars) %>% gt() %>% fmt_missing(columns = everything(), missing_text = "") %>% summary_rows( groups = TRUE, columns = c(mpg:wt), fns = list("my_sum" = ~sum(., na.rm = TRUE)), missing_text = "", formatter = fmt_number, decimals = 0 ) %>% grand_summary_rows( columns = c(mpg:wt), fns = list("my_big_sum" = ~sum(., na.rm = TRUE)), missing_text = "", formatter = fmt_number, decimals = 0 ) %>% tab_options( row_group.font.weight = "bold" ) %>% # 全局汇总行保持原有浅蓝色填充 tab_style( style = list( cell_fill(color = "#d4ebf2") ), locations = cells_grand_summary( columns = c("mpg", "wt") ) ) %>% # 修改分组汇总行的填充逻辑:仅my_sum行中值>0的单元格填浅黄色 tab_style( style = list( cell_fill(color = "#FFFFE0") ), locations = cells_summary( columns = c(mpg, wt), summary = "my_sum", # 仅定位名为my_sum的分组汇总行 rows = ~.x > 0 # 逐单元格判断数值大于0才选中 ) )
效果说明
运行代码后输出的表格符合所有需求:
- 全局汇总行
my_big_sum所有单元格统一填充#d4ebf2浅蓝色 - 分组
my_sum汇总行中,数值为0的单元格(honda组wt列、ford组mpg列)无填充,数值大于0的单元格(honda组mpg列、ford组wt列)填充#FFFFE0浅黄色 - 原有的缺失值空显示、千分位数字格式化、分组标题加粗效果均不受影响
如果使用的gt版本低于0.9.0没有summary参数,可以把cells_summary的定位逻辑替换为rows = ~.x > 0 & grepl("my_sum", .data[["__row_label__"]])实现相同效果。
内容的提问来源于stack exchange,提问作者mdb_ftl
相关产品推荐
相关产品推荐

