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

如何在R中生成含全组T1数据与仅Group3的T2数据的汇总表?

在R中创建带双层表头的分组汇总表

以下是两种基于长/宽格式数据的实现方案,最终用gt包构建符合需求的双层表头汇总表:

方案1:基于长格式数据处理

步骤1:模拟长格式数据

library(dplyr)
library(gt)
library(tidyr)

set.seed(123)
long_data <- tibble(
  group = rep(c("Group1", "Group2", "Group3"), each = 100),
  time = rep(c("T1", "T2"), each = 50, times = 3),
  measure1 = rnorm(300, 50, 10),
  measure2 = rnorm(300, 20, 5),
  measure3 = rnorm(300, 10, 2)
) %>%
  # 移除Group1、Group2的T2数据,还原用户场景
  filter(!(group %in% c("Group1", "Group2") & time == "T2"))

步骤2:分组计算统计量(均值±标准差)

summary_stats <- long_data %>%
  group_by(group, time) %>%
  summarise(
    across(measure1:measure3, ~paste0(round(mean(.), 1), " ± ", round(sd(.), 1))),
    .groups = "drop"
  ) %>%
  # 转宽格式,适配双层表头结构
  pivot_wider(
    names_from = time,
    values_from = measure1:measure3,
    names_sep = "_"
  )

步骤3:用gt构建双层表头

summary_stats %>%
  gt() %>%
  # 设置上层表头:T1/T2,关联对应列
  tab_spanner(label = "T1", columns = ends_with("_T1")) %>%
  tab_spanner(label = "T2", columns = ends_with("_T2")) %>%
  # 重命名列,仅保留指标名称
  cols_label(
    group = "分组",
    measure1_T1 = "指标1",
    measure2_T1 = "指标2",
    measure3_T1 = "指标3",
    measure1_T2 = "指标1",
    measure2_T2 = "指标2",
    measure3_T2 = "指标3"
  ) %>%
  # 空值显示为"-",优化表格美观度
  fmt_missing(columns = everything(), missing_text = "-") %>%
  tab_header(title = "基线与结局得分汇总表")

方案2:基于宽格式数据处理

步骤1:模拟宽格式数据

wide_data <- tibble(
  group = rep(c("Group1", "Group2", "Group3"), each = 50),
  measure1_t1 = rnorm(150, 50, 10),
  measure2_t1 = rnorm(150, 20, 5),
  measure3_t1 = rnorm(150, 10, 2),
  # 仅Group3填充T2数据
  measure1_t2 = ifelse(group == "Group3", rnorm(150, 55, 10), NA),
  measure2_t2 = ifelse(group == "Group3", rnorm(150, 22, 5), NA),
  measure3_t2 = ifelse(group == "Group3", rnorm(150, 11, 2), NA)
)

步骤2:分组计算统计量

wide_summary <- wide_data %>%
  group_by(group) %>%
  summarise(
    across(ends_with("_t1"), ~paste0(round(mean(.), 1), " ± ", round(sd(.), 1))),
    # 对无T2数据的组,直接显示为"-"
    across(ends_with("_t2"), ~ifelse(all(is.na(.)), "-", paste0(round(mean(., na.rm = T), 1), " ± ", round(sd(., na.rm = T), 1)))),
    .groups = "drop"
  )

步骤3:构建双层表头(同方案1的gt逻辑)

wide_summary %>%
  gt() %>%
  tab_spanner(label = "T1", columns = ends_with("_t1")) %>%
  tab_spanner(label = "T2", columns = ends_with("_t2")) %>%
  cols_label(
    group = "分组",
    measure1_t1 = "指标1",
    measure2_t1 = "指标2",
    measure3_t1 = "指标3",
    measure1_t2 = "指标1",
    measure2_t2 = "指标2",
    measure3_t2 = "指标3"
  ) %>%
  tab_header(title = "基线与结局得分汇总表")

关键说明

  • 统计量可按需调整:如需中位数、四分位数范围,修改summarise中的计算逻辑即可
  • gt包的tab_spanner是实现双层表头的核心,通过列后缀匹配关联上层表头
  • 空值处理可灵活选择fmt_missing或手动替换,确保表格展示清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:39:18