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

如何在gtsummary汇总表中分组变量/将多变量归至同一表头

解决方案

1. 变量分组设置

要实现「支气管扩张剂前/后肺功能」的分组展示,可使用add_grouping()函数将对应变量归入指定分组,同时给同组内的变量设置统一子标签(如FEV1、FVC),让表格结构更清晰。

2. 合并缺失值行

由于pre-FEV1与pre-FVC、post-FEV1与post-FVC缺失值完全一致,我们先隐藏默认的单变量缺失行,再手动为每组添加一行统一的缺失值统计。

修改后的完整代码

# 数据预处理(保留原有操作)
Tib1 <- Data %>%
  select(c(sex, alder_basis, etnisknavn, udd1, udd2, lsprefev, lsprefvc, lspostfev, lspostfvc, av)) %>%
  unlabelled() %>%
  tibble()

Tib1$lspostfvc <- as.double(Tib1$lspostfvc)
Tib1$av <- fct_na_value_to_level(Tib1$av, level = "NA")

# 生成汇总表并调整分组与缺失值
Tbl1 <- Tib1 %>%
  tbl_summary(
    by = av,
    value = list(sex ~ "Female", etnisknavn ~ "No Danish descent"),
    # 给肺功能变量设置子标签
    label = list(
      sex ~ "Female",
      etnisknavn ~ "Non-Danish descent",
      alder_basis ~ "Age (as of January 1st 2004)",
      lsprefev ~ "FEV1",
      lsprefvc ~ "FVC",
      lspostfev ~ "FEV1",
      lspostfvc ~ "FVC"
    ),
    statistic = list(
      all_continuous() ~ "{mean} ({sd})",
      all_categorical() ~ "{n} ({p}%)"
    ),
    digits = c(alder_basis) ~ 1,
    missing = "no"  # 隐藏默认单变量缺失行
  ) %>%
  # 添加肺功能分组
  add_grouping(
    variable = c(lsprefev, lsprefvc),
    group_name = "支气管扩张剂前肺功能"
  ) %>%
  add_grouping(
    variable = c(lspostfev, lspostfvc),
    group_name = "支气管扩张剂后肺功能"
  ) %>%
  # 手动插入每组缺失值行
  modify_table_body(
    ~ .x %>%
      # 插入pre组缺失行:在lsprefev行上方添加
      add_row(
        row_type = "label",
        label = "(Missing, n)",
        # 计算pre组缺失数(与lsprefvc一致)
        across(all_of(paste0("stat_", 1:(n_distinct(Tib1$av)+1))), 
               ~ sum(is.na(Tib1$lsprefev))),
        variable = "lsprefev",
        .before = which(.x$variable == "lsprefev")
      ) %>%
      # 插入post组缺失行:在lspostfev行上方添加
      add_row(
        row_type = "label",
        label = "(Missing, n)",
        across(all_of(paste0("stat_", 1:(n_distinct(Tib1$av)+1))),
               ~ sum(is.na(Tib1$lspostfev))),
        variable = "lspostfev",
        .before = which(.x$variable == "lspostfev")
      )
  ) %>%
  # 保留原有其他操作
  add_p() %>%
  add_overall() %>%
  modify_spanning_header(c("stat_1":"stat_8") ~ "**Age of AC debut**") %>%
  modify_caption("**Table 1. Patient Characteristics**") %>%
  modify_footnote(
    update = all_stat_cols() ~ 
      "mean (SD) for continuous; n (%) for categorical"
  )

Tbl1

关键步骤说明

  • 分组设置:add_grouping()会将指定变量归到自定义分组下,分组标题自动居中显示在组内变量上方,完全匹配需求中的结构。
  • 缺失值合并:通过missing = "no"关闭默认的单变量缺失行,再用modify_table_body()手动插入每组的缺失统计——因为pre组两个变量缺失数一致,直接用sum(is.na(Tib1$lsprefev))即可,post组同理。
  • 标签优化:给同组内的FEV1、FVC设置统一子标签,让分组后的表格逻辑更清晰。

内容的提问来源于stack exchange,提问作者Mathias Therkelsen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:49:51