如何为每个变量创建含多级结构的科研型汇总表格?
科研汇总多级表格实现方案
工具选择:优先用R Markdown
普通R脚本适合调试数据,但R Markdown能直接将代码、表格和文本整合,输出符合论文要求的PDF/Word格式,更适合最终成果输出。
步骤1:整理数据结构
先把每个变量的子类别(Levels)拆分成单独行,统一标注所属变量,方便后续合并单元格:
library(tidyverse) # 性别数据 sex_data <- data.frame( Variable = "Sex", Levels = c("Male", "Female"), Treatment_1 = c(59, 43), Treatment_2 = c(23, 20) ) # 年龄数据(均值+标准差) age_data <- data.frame( Variable = "Age", Levels = c("Mean", "SD"), Treatment_1 = c(62.3, 8.5), Treatment_2 = c(61.8, 9.1) ) # 种族数据 race_data <- data.frame( Variable = "Race", Levels = c("White", "Black", "Other"), Treatment_1 = c(70, 25, 7), Treatment_2 = c(35, 10, 8) ) # 合并所有数据 full_tab <- bind_rows(sex_data, age_data, race_data)
步骤2:用gt包生成带合并单元格的表格
gt包专门用于创建专业统计表格,能轻松实现Variable列的多级合并:
library(gt) full_tab %>% gt() %>% # 给治疗组列添加总标题 tab_spanner( label = "Treatment Groups", columns = c(Treatment_1, Treatment_2) ) %>% # 修改列名匹配需求 cols_label( Variable = "Variable", Levels = "Levels", Treatment_1 = "Treatment 1", Treatment_2 = "Treatment 2" ) %>% # 按Variable分组,自动合并重复单元格 group_by(Variable) %>% # 给分组标题加粗 tab_style( style = cell_text(weight = "bold"), locations = cells_row_groups() ) %>% # 根据变量类型设置小数位数:计数保留0位,均值/标准差保留1位 fmt_number( columns = c(Treatment_1, Treatment_2), decimals = case_when( Variable == "Age" ~ 1, TRUE ~ 0 ) )
步骤3:(可选)用flextable输出Word格式表格
如果需要输出可编辑的Word表格,flextable更合适:
library(flextable) full_tab %>% flextable() %>% # 垂直合并Variable列的重复内容 merge_v(j = "Variable") %>% # 表头加粗 bold(part = "header") %>% # 修改列名 set_header_labels( Variable = "Variable", Levels = "Levels", Treatment_1 = "Treatment 1", Treatment_2 = "Treatment 2" ) %>% # 内容居中对齐 align(align = "center", part = "all") %>% # 自动调整列宽 autofit()
最终效果说明
生成的表格会自动将Sex/Age/Race等变量名合并为一个单元格,下方对应各自的Levels(Male/Female、Mean/SD等),完全匹配你期望的多级结构格式。
内容的提问来源于stack exchange,提问作者rstudio_noob
相关产品推荐
相关产品推荐

