gtsummary包tbl_merge合并可变长列制作Meta分析表1
gtsummary实现多臂Meta分析研究特征表方案
你之前用tbl_summary+tbl_merge无法实现效果,核心原因是这两个函数默认面向等行的分组汇总场景,不支持单研究对应多行的多臂研究展示,按以下步骤操作即可得到目标样式表格:
1. 数据预处理
首先把存储多干预组的宽格式数据转为长格式,每个干预组单独占一行,同时为跨行合并做准备:
library(tidyverse) library(gtsummary) # 示例原始数据 MA <- tibble( Study = c("Study 1", "Study 2"), Intervention1 = c("Placebo", "Control"), Intervention2 = c("Walking", "Running"), Intervention3 = c("Running", NA), Number_Int1 = c(21, 19), Number_Int2 = c(19, 20), Number_Int3 = c(20, NA) ) # 宽转长,单干预组对应单行 MA_long <- MA %>% pivot_longer( cols = -Study, names_to = c(".value", "arm_id"), names_pattern = "(Intervention|Number_Int)(\\d+)" ) %>% # 剔除无干预措施的空行 filter(!is.na(Intervention)) %>% # 同一研究仅第一行显示研究名称,其余行留空用于后续合并 group_by(Study) %>% mutate(Study_display = ifelse(row_number() == 1, Study, "")) %>% ungroup() %>% select(Study_display, Intervention, Number_Int)
2. 生成并调整表格
直接基于处理好的长数据生成gtsummary表格,开启垂直合并实现研究名跨行效果:
result_tbl <- MA_long %>% # 直接将数据框转为展示用gtsummary对象,无需额外统计汇总 tbl_df() %>% # 自定义列标题 modify_header( Study_display ~ "**研究名称**", Intervention ~ "**干预措施**", Number_Int ~ "**各组样本量**" ) %>% # 移除默认生成的冗余脚注 modify_footnote(everything() ~ NA) %>% # 核心操作:垂直合并研究列单元格,实现单研究名跨多行对应多干预组 modify_column_merge( columns = Study_display, merge_v = TRUE ) %>% # 可选:研究名称加粗,匹配常规Meta分析表1样式 bold(i = ~Study_display != "")
扩展说明
如果你还有其他研究层面的特征(如发表年份、研究类型、偏倚风险评分等,每个研究仅需显示1次),处理逻辑和研究名称列完全一致:
- 长数据转换时这些字段会自动在同一研究的所有干预组行重复
- 新增
mutate步骤将同一研究非首行的对应字段值设为空 - 最后在
modify_column_merge中把这些列加入垂直合并参数即可
内容的提问来源于stack exchange,提问作者Benjamin Moran
相关产品推荐
相关产品推荐

