如何在gtsummary::tbl_summary中按分组列指定不同统计格式?
实现按分组列自定义统计格式的方法
可以实现这个需求,tbl_summary() 默认按变量(行)设置统计格式,但通过 gtsummary 包的modify_*系列函数可以针对特定分组列调整统计输出:
方法一:重新计算指定列的统计量(推荐)
直接对Group C列重新计算均值并格式化,避免字符串处理可能的误差:
library(gtsummary) set.seed(123) # 固定随机种子,确保结果可复现 df <- data.frame( group = rep(c("A", "B", "C"), each = 10), var1 = rnorm(30, mean = 5, sd = 2), var2 = rnorm(30, mean = 7, sd = 1), var3 = rnorm(30, mean = 9, sd = 3)) # 先生成包含所有分组均值+标准差的基础表格 tbl <- df |> tbl_summary( by = group, statistic = all_continuous() ~ "{mean} ({sd})", digits = all_continuous() ~ 2 # 统一保留2位小数 ) # 修改Group C列,仅显示均值 final_tbl <- tbl |> modify_column_statistic( columns = stat_C, # 目标分组列,命名规则为stat_+分组名 fns = all_continuous() ~ ~mean(.x, na.rm = TRUE), # 重新计算均值 fmt_fun = all_continuous() ~ style_number(digits = 2) # 格式化输出 ) final_tbl
方法二:从现有统计字符串中提取均值
如果不想重新计算,可以直接从已生成的"均值 (标准差)"字符串中提取均值部分:
final_tbl <- tbl |> modify_table_body( mutate, stat_C = stringr::str_extract(stat_C, "^[^\\(]+") # 提取括号前的均值文本 )
两种方法都能实现Group A、B显示均值 (标准差),Group C仅显示均值的效果。
内容的提问来源于stack exchange,提问作者bmacwilliams
相关产品推荐
相关产品推荐

