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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:39:19