如何转置gtsummary包中tbl_summary生成的分类变量汇总表?
解决gtsummary汇总表转置问题
步骤1:模拟目标数据
先生成符合场景的100人颜色偏好模拟数据:
library(tidyverse) library(gtsummary) # 固定随机种子保证结果可重复 set.seed(123) df <- tibble( car = sample(c("red", "blue", "yellow"), 100, replace = TRUE), shirt = sample(c("red", "blue", "yellow"), 100, replace = TRUE), website = sample(c("red", "blue", "yellow"), 100, replace = TRUE) )
步骤2:生成初始分类汇总表
用tbl_summary生成各项目的颜色分布百分比统计:
initial_tbl <- df %>% tbl_summary( type = everything() ~ "categorical", statistic = everything() ~ "{p}%", label = list(car = "汽车", shirt = "衬衫", website = "网站") )
步骤3:转置为目标格式
提供两种实现方式,按需选择:
方式1:转为数据框后重塑(适合后续数据分析)
# 将汇总表转为tidy数据框,再重塑为宽格式 transposed_df <- initial_tbl %>% as_tibble() %>% select(项目 = label, 颜色 = label_1, 百分比 = stat_0) %>% # 过滤掉无关行(如总计、未知值) filter(!颜色 %in% c("Total", "Unknown")) %>% pivot_wider(names_from = 颜色, values_from = 百分比)
方式2:保留gtsummary表格样式(适合报告输出)
transposed_tbl <- initial_tbl %>% modify_table_body( ~ .x %>% select(项目 = label, 颜色 = label_1, 百分比 = stat_0) %>% filter(!颜色 %in% c("Total", "Unknown")) %>% pivot_wider(names_from = 颜色, values_from = 百分比) ) %>% modify_header( 项目 ~ "偏好项目", blue ~ "蓝色", red ~ "红色", yellow ~ "黄色" ) %>% modify_caption("各项目颜色偏好百分比分布")
关键说明
- 如果初始汇总表包含
Total或Unknown行,必须用filter过滤,否则转置后会出现多余列。 - 方式1输出的是普通数据框,可直接用于后续计算;方式2保留了gtsummary的表格样式,支持进一步美化后导出为Word/HTML格式。
内容的提问来源于stack exchange,提问作者TJ87
相关产品推荐
相关产品推荐

