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

如何用R的gtsummary生成带聚合拼接的透视表?

解决方案:用gtsummary生成参数-时间点的均值±标准差透视表

核心实现代码

长格式数据直接处理

如果你的数据已经是长格式(列包含:id、group、parameter、timepoint、value),直接用gtsummary的tbl_strata+tbl_summary就能快速生成符合要求的分层表格:

library(gtsummary)
library(tidyverse)

# 示例长格式数据(替换为你的真实数据)
set.seed(123)
df_long <- expand_grid(
  id = 1:50,
  group = c("A", "B"),
  parameter = paste0("param", 1:18),
  timepoint = paste0("t", 1:6)
) %>%
  mutate(value = rnorm(n(), mean = 10, sd = 2))

# 生成按group分层的统计表格
df_long %>%
  tbl_strata(
    strata = group,
    .tbl_fun = ~.x %>%
      tbl_summary(
        by = timepoint,
        include = parameter,
        statistic = all_continuous() ~ "{mean} ± {sd}",
        value = value,
        missing = "no"
      ) %>%
      modify_header(label = "参数") %>%
      modify_spanning_header(all_stat_cols() ~ "时间点")
  ) %>%
  as_gt() # 转换为gt对象,支持直接导出Word/PDF

宽格式数据转长格式处理

如果你的原始数据是宽格式(列类似:id、group、param1_t1、param1_t2...),先转成长格式再用上述代码:

# 示例宽格式数据(替换为你的真实数据)
df_wide <- df_long %>%
  pivot_wider(names_from = c(parameter, timepoint), values_from = value)

# 转长格式后生成表格
df_wide %>%
  pivot_longer(
    cols = -c(id, group),
    names_sep = "_", # 根据你的列名分隔符调整
    names_to = c("parameter", "timepoint"),
    values_to = "value"
  ) %>%
  tbl_strata(
    strata = group,
    .tbl_fun = ~.x %>%
      tbl_summary(
        by = timepoint,
        include = parameter,
        statistic = all_continuous() ~ "{mean} ± {sd}",
        value = value,
        missing = "no"
      ) %>%
      modify_header(label = "参数") %>%
      modify_spanning_header(all_stat_cols() ~ "时间点")
  ) %>%
  as_gt()

你的疑问解答

  1. 从长格式开始处理是否错误?
    完全不是错误。长格式是tidy数据的标准格式,更适配dplyr、gtsummary这类工具的逻辑,尤其是你有大量参数和时间点的场景,长格式能避免宽格式列名混乱的问题,代码更易维护和扩展。

  2. 能否使用tbl_strata按group变量分层展示表格?
    可以,上述代码已经实现。tbl_strata会自动为每个group生成独立的子表格,并保留统一的表头样式,导出Word/PDF时格式规整,完全满足分层展示需求。

不同解决方案对比

方案类型优点缺点
gtsummary方案代码简洁,内置统计量格式化,支持分层,适配rmarkdown,导出格式美观对极复杂自定义格式的灵活性略低,但完全覆盖你的需求
tidyr手动聚合方案完全自定义,自由度极高代码冗余,格式维护成本高,导出时需手动调整,参数/时间点变动时修改繁琐
data.table方案大数据处理速度快,dcast语法简洁导出适配rmarkdown不便,统计量需手动格式化
group_by+summarise方案逻辑直观,适合小数据集参数/时间点多时代码重复,表格格式需额外调整

现有手动代码的不足

  1. 代码冗余:需手动编写聚合函数、拼接均值±标准差文本,参数/时间点变动时需多处修改。
  2. 格式维护成本高:手动生成的表格在导出Word/PDF时,对齐、表头、分层格式需额外调整,易出错。
  3. 可读性差:自定义聚合和拼接逻辑不如gtsummary的语义化代码清晰,后续维护难度大。
  4. 功能缺失:gtsummary内置的缺失值处理、统计量标注、分层展示等功能,手动代码需额外实现,效率低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 23:02:49