如何用R的tableby()将分层显示为列而非行?求替代方案
实现分层(strata)按列展示的统计表格
用arsenal包的tableby()实现
可以通过将分层变量与子类别变量交叉作为分组列,同时开启观测数显示来实现需求:
knitr::opts_chunk$set(echo = TRUE) library(arsenal) require(knitr) data(mockstudy) # 筛选目标治疗组数据 dat <- subset(mockstudy, arm %in% c("A: IFL", "F: FOLFOX")) # 以治疗组+性别的交叉组合作为列分组,构建统计表格 tab <- tableby(age + bmi ~ arm * sex, data = dat) # 输出表格,开启列标题的观测数显示 summary(tab, show.n = TRUE, title = "按治疗组和性别分层的统计结果")
如果更倾向于手动定义分组名称,可以先构造交叉分组变量:
dat$subgroup <- paste(dat$arm, dat$sex, sep = " - ") tab <- tableby(age + bmi ~ subgroup, data = dat) summary(tab, show.n = TRUE)
用gtsummary包实现(更灵活美观)
gtsummary对列分层表格的支持更直观,输出格式也更适配报告场景:
library(gtsummary) library(dplyr) dat %>% filter(arm %in% c("A: IFL", "F: FOLFOX")) %>% tbl_summary( include = c(age, bmi), # 指定需要展示的变量 by = c(arm, sex), # 按治疗组和性别交叉分层为列 # 自定义数值变量的统计量格式(可选,按需调整) statistic = list( age ~ "{mean} ({sd})", bmi ~ "{mean} ({sd})" ) ) %>% # 自定义列标题,显示分组名称和观测数 modify_header(all_stat_cols() ~ "{level} (n = {n})") %>% as_kable() # 转为kable格式适配Rmarkdown渲染
内容的提问来源于stack exchange,提问作者Shannon
相关产品推荐
相关产品推荐

