如何在R的gtsummary包tbl_summary中设置两个分组变量?
双分组变量统计汇总表实现方案
要同时用年龄组和性别作为分组变量生成汇总表,只需调整tbl_summary的分组参数,以下两种方式适配不同的表格展示需求:
1. 交叉分组(年龄组×性别作为列)
直接在by参数中同时传入两个分组变量,表格会生成所有年龄组与性别的交叉组合列:
data %>% select(Sex, Age, Height, Weight, BMI, MET) %>% mutate(Age_cat = case_when( Age < 30 ~ '18-29 years', Age < 40 ~ '30-39 years', Age < 50 ~ '40-49 years', Age < 80 ~ '50-70 years' )) %>% # 可选:过滤年龄组缺失的行 drop_na(Age_cat) %>% tbl_summary( by = c(Age_cat, Sex), # 同时指定年龄组和性别为分组变量 digits = everything() ~ 1, statistic = all_continuous() ~ "{median} ({p25} – {p75})", missing = "no" # 隐藏缺失值统计,按需选择 ) %>% bold_labels() %>% add_overall(col_label = "Overall") # 添加总体汇总列
2. 分层展示(按性别分块,每块内按年龄组汇总)
如果希望按性别拆分表格,每个性别块下展示对应年龄组的统计结果,用tbl_strata实现分层:
data %>% select(Sex, Age, Height, Weight, BMI, MET) %>% mutate(Age_cat = case_when( Age < 30 ~ '18-29 years', Age < 40 ~ '30-39 years', Age < 50 ~ '40-49 years', Age < 80 ~ '50-70 years' )) %>% drop_na(Age_cat) %>% tbl_strata( strata = Sex, # 按性别分层 .tbl_fun = ~ .x %>% tbl_summary( by = Age_cat, digits = everything() ~ 1, statistic = all_continuous() ~ "{median} ({p25} – {p75})" ) %>% bold_labels() %>% add_overall() )
说明
- 若你的目标表格是交叉列形式,选第一种方案;若是分块展示,选第二种方案
drop_na(Age_cat)用于过滤年龄分组未匹配的样本,避免生成空的分组列/块
内容的提问来源于stack exchange,提问作者Tamara Barusová
相关产品推荐
相关产品推荐

