如何在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
相关产品推荐
相关产品推荐

