You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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á

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 20:33:20