gtsummary统计表格终极指南:5个实战场景,快速产出可直接投稿的分析结果表
gtsummary统计表格终极指南5个实战场景快速产出可直接投稿的分析结果表【免费下载链接】gtsummaryPresentation-Ready Data Summary and Analytic Result Tables项目地址: https://gitcode.com/gh_mirrors/gt/gtsummary写论文、做报告的时候最折磨人的往往不是分析本身而是把分析结果排成一张漂亮规整的表格。手动复制粘贴到 Word调半天对齐和字体稍一改动数据又得重来一遍——如果你也有这种经历那么 gtsummary 统计表格工具就是为你准备的。这个 R 包被称为统计表格的终极助手只要一两行代码就能自动识别数据中的连续变量、分类变量和二值变量生成描述性统计表也就是论文里的 Table 1、回归结果表并支持 p 值、样本量、合并表格、主题美化等一系列扩展输出结果直接达到期刊投稿级别。接下来我会从零开始用 5 个实战场景带你走完数据 → 表格 → 可投稿成果的全过程。全文不堆砌理论每个场景都有可直接运行的代码。一张表格曾经劝退了多少科研人先回忆一下传统做法打开统计软件算出各组均值、标准差、频数、百分比再打开表格软件手动排版遇到分组比较还要逐个变量跑检验把 p 值填进正确的位置改一次数据全套流程重来。这种工作枯燥、易错还极其消耗时间。gtsummary 想解决的就是这件事。它的定位很纯粹把统计和排版一步到位。底层整合了 broom模型整理、gt表格渲染、labelled变量标签等工具链外部却只暴露一组风格统一、可拼接的函数。你不需要懂 HTML 或 LaTeX也能产出同等质量的表格。认识一下这个表格管家gtsummary 的核心家族成员大致分为四类建表函数tbl_summary()描述性统计、tbl_regression()回归结果、tbl_uvregression()单因素回归、tbl_merge()/tbl_stack()表格合并与堆叠。加料函数add_n()、add_p()、add_overall()、add_stat()等往表里补样本量、组间差异检验、总计列和自定义统计量。美化函数bold_labels()、italicize_levels()、modify_header()、modify_caption()以及modify_*系列负责标题、脚注、对齐、缩进等细节。输出函数as_gt()、as_flex_table()、as_kable_extra()等把表格转成可保存或渲染的格式。这些函数全部以管道%%或|串联读起来就像在描述对这张表做什么非常直觉化。所有源码都集中在R/目录下想深挖实现逻辑随时可以翻。场景一三分钟做出人生第一张统计表安装很简单直接走 CRANinstall.packages(gtsummary)然后加载包自带的trial演示数据一个模拟的肿瘤临床试验数据集一行代码出表library(gtsummary) # 加载自带演示数据 trial # 一句话生成描述性统计表 tbl_summary(trial, include c(age, grade, response))tbl_summary()会自动判断变量类型数值变量默认输出中位数和四分位数分类变量输出频数和百分比存在缺失值的变量还会自动加一行Unknown统计缺失个数。整个过程不需要你手动指定任何统计口径这就是智能默认的价值。场景二让表格从能用到能投稿只展示总体统计还不够期刊审稿人通常想看分组比较。给tbl_summary()加一个by参数指定分组变量再用add_*系列把检验结果补进来trial | tbl_summary( by trt, # 按治疗组分组 include c(age, grade, response), missing no # 缺失值单独处理不占行 ) | add_n() | # 加一列各变量非缺失样本数 add_p() | # 自动选择检验方法并给出 p 值 modify_header(label **变量**) | bold_labels()add_p()的贴心之处在于它会按变量类型自动挑选检验方法连续变量用 Wilcoxon 秩和检验分类变量用卡方检验并在表格脚注里注明所用方法。这样一张Table 1 标准件就成型了。上图展示了 gtsummary 描述性统计表格的一整套定制玩法分组列、总体列、样本量、组间 p 值、变量加粗、表头改写全部通过管道拼接完成。场景三回归结果一行代码成表如果说描述性统计是入门那么tbl_regression()就是 gtsummary 最让人上瘾的功能。它接收任意常见的回归模型对象自动把系数、置信区间、p 值整理成投稿规格的表格还能根据模型类型自动识别列名——逻辑回归显示 ORCox 回归显示 HR。以逻辑回归为例# 拟合模型 mod_logit - glm(response ~ age grade trt, data trial, family binomial) # 一键成表exponentiate TRUE 表示输出 OR 值 tbl_regression(mod_logit, exponentiate TRUE)换成生存分析同样顺畅只需引入 survival 包library(survival) mod_cox - coxph(Surv(ttdeath, death) ~ age grade, data trial) tbl_regression(mod_cox, exponentiate TRUE)上图为tbl_regression()的输出示例包含 OR、95% 置信区间和 p 值列分类变量自动为每个水平生成子行并留出参照行。场景四多张表并排对比一眼看穿研究经常需要比较多个模型或多个结局。此时tbl_merge()能把多张结构相同的表横向拼在一起并给每组列加上跨越表头的说明文字t1 - glm(response ~ age grade, trial, family binomial) | tbl_regression(exponentiate TRUE) t2 - coxph(Surv(ttdeath, death) ~ age grade, trial) | tbl_regression(exponentiate TRUE) tbl_merge( tbls list(t1, t2), tab_spanner c(**响应结局**, **生存结局**) )如上图所示同一批协变量在不同结局下的 OR 与 HR 并排陈列审稿人扫一眼就能完成横向对比。场景五进阶玩法——口径、样式、内联统计一把抓自定义统计口径自动判断并不总符合你的研究设计。例如你想让所有连续变量都输出均值±标准差可以直接改写statistic参数trial | tbl_summary( include c(age, marker), statistic all_continuous() ~ {mean} ({sd}) )想加入自己的检验方法用add_stat()传自定义函数即可# 自定义检验返回分组 t 检验的 p 值 my_ttest - function(data, variable, by, ...) { t.test(data[[variable]] ~ data[[by]])$p.value } trial | tbl_summary(by trt, include age) | add_stat(fns age ~ my_ttest) | modify_header(add_stat_1 **t 检验 p 值**)全局主题与样式复用为了保持整篇报告风格统一可以把常用样式固化成主题一次设置处处生效set_gtsummary_theme(theme_gtsummary_compact()) # 还可基于现有主题叠加自定义元素 custom_theme - theme_gtsummary_compact() | modify_element(header-labels, list(stat_0 **总计**)) set_gtsummary_theme(custom_theme)主题相关说明见vignettes/articles/themes.Rmdmodify_*系列函数的完整用法在vignettes/articles/modify-functions.Rmd中有大量示例。在 R Markdown 里引用表格数字gtsummary 与 R Markdown 的配合堪称完美。inline_text()可以把表格里的某个统计量直接读出来写进正文报告完全可复现tbl - trial | tbl_summary(include age) # 正文中引用年龄的中位数改数据后数字自动更新 r inline_text(tbl, variable age, column stat_0, pattern {median})实战从原始数据到完整投稿工作流把前面几招串起来就是一个完整的产出流程。假设你要为某研究同时准备 Table 1 和结果表library(gtsummary) library(survival) # 第一步Table 1含分组比较 table_one - trial | tbl_summary(by trt, include c(age, grade, stage, response)) | add_n() | add_p() | bold_labels() # 第二步多因素回归结果 res_table - glm(response ~ age grade trt, trial, family binomial) | tbl_regression(exponentiate TRUE) # 第三步保存成所需格式 table_one | as_gt() | gt::gtsave(table1.png) # 图片方便粘贴进 Word res_table | as_flex_table() | flextable::save_as_docx(regression.docx) # Word 文档 res_table | as_kable_extra() # 或交给 kableExtra 继续渲染避坑清单与效率建议变量类型决定统计口径若某数值列被误判为分类变量用type list(var ~ continuous)强制指定反过来同理。缺失值策略要明确默认missing ifany会给缺失变量加Unknown行如果不想展示就显式写missing no。合并前先对齐结构tbl_merge()对同构表最友好若行顺序错乱可用modify_table_body(~dplyr::arrange(.x, ...))修正。二分类变量可以只占一行想让是/否类变量在回归表中单行显示用show_single_row c(var)即可。p 值格式统一add_p()之后可再用modify_fmt_fun(p.value ~ style_pvalue(digits 3))统一小数位数。现在动手吧gtsummary 的学习曲线非常平缓先跑通tbl_summary()再尝试add_p()和tbl_regression()最后玩转合并与主题基本就覆盖了 90% 的日常需求。想深入学习可以阅读仓库内的vignettes/articles/tbl_summary.Rmd与vignettes/articles/tbl_regression.Rmd两个教程文档想研究实现细节直接翻R/下的源码即可。我的建议很简单打开 RStudio载入trial数据从今天第一段代码开始跑一遍。当你亲眼看到几秒钟内生成那张排版精致的表格时就会明白为什么越来越多人把它写进论文致谢。把重复劳动交给 gtsummary把时间留给真正重要的分析吧。【免费下载链接】gtsummaryPresentation-Ready Data Summary and Analytic Result Tables项目地址: https://gitcode.com/gh_mirrors/gt/gtsummary创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考