如何在gtsummary的tbl_summary中拆分by分组的多统计量列?
用gtsummary拆分分组统计量为独立列
要实现分组后将不同统计量拆分为单独列,可通过tbl_summary结合modify_column_split实现,步骤如下:
- 指定多统计量:在
tbl_summary的statistic参数中,为变量定义需要的所有统计量(如均值、中位数、最值等)。 - 拆分分组列:用
modify_column_split将每个分组对应的统计列拆分为多个子列,分别对应不同统计量。 - 优化表头格式:通过
modify_spanning_header设置跨列标题,让表格结构更清晰。
代码示例
library(tidyverse) library(gtsummary) # 生成带多统计量的汇总表并拆分列 mtcars %>% select(vs, mpg, disp) %>% tbl_summary( by = vs, # 为连续变量指定多个统计量 statistic = all_continuous() ~ c("{mean}", "{median}", "{min}", "{max}"), # 设置变量显示标签 label = list(mpg ~ "英里/加仑", disp ~ "发动机排量") ) %>% # 拆分每个分组的统计列,按统计量生成子列 modify_column_split( columns = starts_with("stat_"), pattern = "(mean|median|min|max)", split_label = c("均值", "中位数", "最小值", "最大值") ) %>% # 设置跨列标题,整合同分组的统计量子列 modify_spanning_header( stat_0_1:stat_0_4 ~ "**vs=0**", stat_1_1:stat_1_4 ~ "**vs=1**" ) %>% # 调整子列表头的显示格式 modify_header( stat_0_1 ~ "均值", stat_0_2 ~ "中位数", stat_0_3 ~ "最小值", stat_0_4 ~ "最大值", stat_1_1 ~ "均值", stat_1_2 ~ "中位数", stat_1_3 ~ "最小值", stat_1_4 ~ "最大值" )
添加更多统计量(如标准误、四分位距)
如果需要添加标准误、四分位距这类自定义统计量,可结合add_stat扩展后再拆分:
mtcars %>% select(vs, mpg) %>% tbl_summary( by = vs, statistic = all_continuous() ~ c("{mean}", "{median}", "{p25} - {p75}"), label = mpg ~ "英里/加仑" ) %>% # 添加标准误统计量 add_stat( fns = all_continuous() ~ function(x) sprintf("%.2f", sd(x)/sqrt(length(x))), location = "statistic" ) %>% # 拆分列并设置表头 modify_column_split( columns = starts_with("stat_"), split_label = c("均值", "中位数", "四分位距", "标准误") ) %>% modify_spanning_header( stat_0_1:stat_0_4 ~ "**vs=0**", stat_1_1:stat_1_4 ~ "**vs=1**" )
内容的提问来源于stack exchange,提问作者purpleblade98
相关产品推荐
相关产品推荐

