gt表格按行条件设置指定列单元格填充色却整列上色的问题咨询
问题核心原因
该异常和R Markdown环境完全无关,是两处语法错误导致的:
- 第一处:
cells_body()用于指定行范围的参数名是**rows(复数)**,而非代码中写的row(单数)。你传入的row参数属于gt无法识别的无效参数,所有取值都会被直接忽略,因此无论怎么调整参数值,都无法实现行级筛选,最终默认对目标列的所有行应用填充样式。 - 第二处:就算修正参数名为
rows,直接传入"Paid Per Episode" > 33000的写法也不符合gt的行筛选语法规范,无法正确匹配目标行。
修正后的可运行代码
提供两种适配不同场景的方案:
方案1:预计算符合条件的行号(兼容所有gt版本)
# 基于原始数据筛选出「Paid Per Episode」数值大于33000的行索引 target_row_idx <- which(hip_dt_epsd_table$pd_per_epsd > 33000) hip_dt_epsd_table %>% rename( State = JUR_ST_ABBR_PRIM, Episodes = epsd_count, "Paid Per Episode" = pd_per_epsd, "Episodes Outlier" = epsd_outlier, "Paid Per Episode Outlier" = pd_epsd_outlier, "Episodes 99th Percentile" = epsd_count_99th ) %>% gt() %>% fmt_currency(columns = vars("Paid Per Episode", "Paid Per Episode Outlier")) %>% fmt_number( columns = vars("Episodes", "Episodes Outlier", "Episodes 99th Percentile"), sep_mark = ",", drop_trailing_zeros = TRUE ) %>% tab_style( style = cell_fill(color = "lightblue"), locations = cells_body( columns = "Paid Per Episode", rows = target_row_idx # 传入预计算的行号 ) )
方案2:直接在参数内写筛选表达式(适配gt 0.9.0及以上版本)
hip_dt_epsd_table %>% rename( State = JUR_ST_ABBR_PRIM, Episodes = epsd_count, "Paid Per Episode" = pd_per_epsd, "Episodes Outlier" = epsd_outlier, "Paid Per Episode Outlier" = pd_epsd_outlier, "Episodes 99th Percentile" = epsd_count_99th ) %>% gt() %>% fmt_currency(columns = vars("Paid Per Episode", "Paid Per Episode Outlier")) %>% fmt_number( columns = vars("Episodes", "Episodes Outlier", "Episodes 99th Percentile"), sep_mark = ",", drop_trailing_zeros = TRUE ) %>% tab_style( style = cell_fill(color = "lightblue"), locations = cells_body( columns = "Paid Per Episode", # 用~开头的匿名函数直接引用重命名后的表数据做筛选 rows = ~.["Paid Per Episode"] > 33000 ) )
注意:现有代码中用
vars()指定列的写法在所有gt版本中均兼容,无需额外调整。
内容的提问来源于stack exchange,提问作者Bjc51192
相关产品推荐
相关产品推荐

