gt表格条件格式红绿灯系统实现:检测值与限值比对梯度高亮设置
gt表格多梯度红绿灯条件格式实现方案
核心思路
先对原始数据做预处理,合并两个限值列得到每行的有效限值,计算检测值与限值的比值后,通过gt的data_color()函数批量映射填充颜色,适配大数据集使用。
步骤1:数据预处理
先合并ADWG和AGWR列得到每行的有效限值,同时计算检测值与限值的比值,中间计算用的列后续可隐藏不展示:
library(dplyr) library(gt) final_processed <- final %>% mutate( # 取两个限值中非NA的作为当前行有效限值,若两个都存在需取更严值可改为pmin(ADWG, AGWR, na.rm = T) cur_limit = coalesce(ADWG, AGWR), # 计算检测值与限值的比值 value_ratio = Value / cur_limit )
步骤2:完整gt表格代码
final_processed %>% gt() %>% # 隐藏中间计算列,不改变原表格展示结构 cols_hide(columns = c(cur_limit, value_ratio)) %>% tab_options( heading.title.font.size = "medium", heading.subtitle.font.size = "small", table.font.size = "small", table.font.names = "Arial") %>% cols_align(align = "left", columns = everything()) %>% cols_label(Value = 'Result') %>% tab_spanner(label = "Results",columns = c(Analyte, Units, Category, Value)) %>% tab_spanner(label = "Guidelines", columns = c(ADWG, AGWR)) %>% fmt_missing(columns = everything(), missing_text = "-") %>% fmt_number(columns = where(is.numeric), n_sigfig = 2) %>% # 批量实现梯度颜色填充 data_color( columns = Value, rows = !is.na(cur_limit), fn = function(x) { ratios <- final_processed$value_ratio[!is.na(final_processed$cur_limit)] case_when( ratios <= 0.1 ~ "#00BA38", # 绿色:检测值≤限值10% ratios > 0.1 & ratios < 0.5 ~ "#F6E400", # 黄色:10%限值<检测值<50%限值 ratios >= 0.5 & ratios < 1 ~ "#FFA500", # 橙色:50%限值<检测值<100%限值 ratios >= 1 ~ "#F8766D" # 红色:检测值≥限值 ) }, apply_to = "fill" ) %>% # 给超标的检测值加粗 tab_style( style = cell_text(weight = "bold"), locations = cells_body(columns = Value, rows = value_ratio >= 1) )
说明
- 该方案适配任意规模的数据集,无需手动逐行设置条件
- 阈值和色值可根据需求直接修改
case_when中的对应参数即可 - 若某行同时存在ADWG和AGWR两个限值,只需修改
cur_limit的计算逻辑即可适配,比如取最小值作为更严格的判断标准
内容的提问来源于stack exchange,提问作者tm95
相关产品推荐
相关产品推荐

