使用flextable的as_grouped_data后如何按分组条件格式化行?
解决方案
核心思路:as_grouped_data处理后会将分组列的子行值自动设为NA,导致无法直接用分组列筛选对应子行。我们可以提前新增一列保留每一行的分组归属信息,用该列作为筛选条件即可实现按组设置不同小数位数,无需手动指定行号。
完整代码如下:
library(tidyverse) library(flextable) df <- tibble(vStat = c(rep("Average Degree", 3), rep("Average Weight", 3)), val = c(1.22222, 1.33333, 1.44444, 1.55555, 1.66666, 1.77777)) flextable( # 预处理:新增辅助列存储每行所属分组 df %>% mutate(format_group = vStat) %>% as_grouped_data(groups="vStat") ) %>% # 按辅助列筛选分组,设置对应小数位数,!is.na(val)用于排除分组标题行 colformat_double(i = ~ format_group == "Average Degree" & !is.na(val), j = "val", digits = 1) %>% colformat_double(i = ~ format_group == "Average Weight" & !is.na(val), j = "val", digits = 3) %>% # 隐藏不需要展示的辅助列 hide(j = "format_group") %>% autofit()
上述方法兼容动态更新的数据集,只要分组标识不变,无需修改代码即可自动匹配格式规则。
内容的提问来源于stack exchange,提问作者bcarothers
相关产品推荐
相关产品推荐

