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

