R语言gtsummary如何转置汇总表 实现统计量为列车型为行
问题说明
你使用gtsummary包生成的车型-速度统计汇总表现有效果如下:
现有表格以车型为列标题、速度的统计值为行内容,需要调整布局为:非缺失样本量N、中位数、取值范围等统计指标为列标题,各车型为行标题。
修改方案
原代码使用tbl_summary(by = car)的逻辑是按车型分组统计速度指标,天然会将分组变量(车型)放在列上、统计量放在行上,和目标布局相反。直接使用gtsummary专为「分类行变量+连续变量统计列」场景设计的tbl_continuous()函数即可实现需求,无需手动转置表格,且完整保留原有的p值计算、格式设置功能。
修改后的完整可运行代码如下:
library(dplyr) library(gtsummary) library(flextable) library(officer) dff <- structure(list(car = c("Honda", "Opel", "Toyota", "Ford", "Toyota", "Toyota", "Toyota", "Toyota", "Toyota", "Toyota", "Opel", "Opel", "Opel", "Opel", "Opel", "Opel", "Opel", "Opel", "Opel", "Opel", "Opel", "Opel", "Opel", "Opel", "Opel", "Opel", "Ford", "Ford", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Honda", "Ford", "Ford", "Ford", "Ford", "Ford", "Ford", "Ford", "Ford", "Ford", "Ford", "Ford", "Ford"), speed = c(0.0818884144530994, 0.078202618461924, 0.0923996477945826, 0.0833895373090655, 0.0654271133558503, 0.104902087082777, 0.0767497512256455, 0.0768176971270742, 0.0712864905867507, 0.0554218586661056, 0.0850360296771161, 0.057954145633874, 0.0441854480859481, 0.0881234075504796, 0.0639960050103843, 0.0620009991911811, 0.104363010616978, 0.0794749032774448, 0.0639931924725228, 0.0347553634870904, 0.0235164440970578, 0.000945735768549479, 0.0951332350399264, 0.0848849882638771, 0.0770268456523483, 0.0860962939374158, 0.0779784304434212, 0.0700250314203401, 0.0979442195442822, 0.0895676676419504, 0.145633658479367, 0.114931834231455, 0.0907671090187226, 0.118083514719288, 0.0903243829523317, 0.0852324890285871, 0.0196699224014573, 0.080910276397263, 0.0667256842832578, 0.100828213795925, 0.0878058668694595, 0.0758022260504243, 0.106719838699154, 0.0920508745930191, 0.0710548353544975, 0.0859097610562796, 0.0692502648434324, 0.0642848032824688, 0.0934410581211051, 0.0901226640111047, 0.0880892316582102, 0.0526000795151807, 0.0487590677497554, 0.0362328359734826, 0.130861058707153, 0.115286968138184, 0.0973709227872183, 0.075845698962114, 0.0726245579593528, 0.0660583859152627, 0.0432445861280246, 0.0326512563074741, 0.0833250468064319, 0.0712792343009829, 0.0662704232419949, 0.0267930511166544, 0.0195822515826592, 0.0182287564631037, 0.0565616222676817, 0.0462813673349305)), class = "data.frame", row.names = c(NA, -70L)) # 调整布局后的建表代码 dff %>% tbl_continuous( variable = speed, include = car, label = list(car ~ "车型", speed ~ "速度"), digits = ~3, statistic = ~ c( "{N_nonmiss}", "{median} ({p25}, {p75})", "{min}, {max}" ) ) %>% modify_header( stat_1 ~ "**非缺失样本量N**", stat_2 ~ "**中位数(25分位数, 75分位数)**", stat_3 ~ "**取值范围(最小值, 最大值)**", p.value ~ "**P值**" ) %>% modify_caption("不同车型速度统计汇总表") %>% bold_labels() %>% add_p(pvalue_fun = ~style_pvalue(.x, digits = 2)) %>% bold_p() %>% as_flex_table()
关键改动说明
- 替换
tbl_summary(by=car)为tbl_continuous():指定连续统计变量为speed,行分类变量为car,天然实现「车型在行、统计量在列」的布局,无需后期手动转置表格。 - 统计量参数完全沿用原有设置,按顺序生成非缺失样本量N、中位数(四分位距)、取值范围三列,统计计算结果和原表完全一致。
- 完整保留原代码的所有格式配置:标签加粗、p值保留2位小数、显著p值加粗、输出为flextable格式,可直接导出到Word使用。
内容的提问来源于stack exchange,提问作者Eugene E
相关产品推荐
相关产品推荐

