gt包中如何基于相对位置而非字面列名选择待格式化单元格
问题原因
你写的table2无法运行的核心原因是:cells_body的rows参数接收的是返回行逻辑值的表达式,直接在该参数内调用last_col()、ends_with()这类tidyselect列选择器时,gt无法在行筛选的上下文里正确解析列选择器的指向。
可用的实现方案
下面两种方案都不需要硬编码列名,适配列名不同但结构一致的表格场景:
方案1:用across()复用列选择规则
适合需要通过列名特征(比如后缀、前缀)选择目标列的场景,列选择和行判断的规则可以完全复用:
table2_fix1 <- df %>% gt() %>% tab_style( style = cell_text(color = "red"), locations = cells_body( columns = ends_with("B"), rows = across(all_of(ends_with("B")), ~ .x > 8) ) ) table2_fix1
方案2:提前定位目标列位置
适合固定选择某一位置的列(比如最后一列、第二列)的场景:
# 提前获取目标列的列名,这里取最后一列为例 target_col <- colnames(df)[ncol(df)] table2_fix2 <- df %>% gt() %>% tab_style( style = cell_text(color = "red"), locations = cells_body( columns = all_of(target_col), rows = .data[[target_col]] > 8 ) ) table2_fix2
内容的提问来源于stack exchange,提问作者RegalPlatypus
相关产品推荐
相关产品推荐

