如何在{gtsummary}的tbl_uvregression中按类别展示事件数与随访时间?
解决方案:用{gtsummary}按分类变量水平展示事件数及随访时长
很高兴听到你用{gtsummary}制作回归表格体验不错!针对你希望按gender不同水平展示事件数、随访时长的需求,完全可以通过{gtsummary}自带功能实现,无需手动计算后合并表格,下面提供两种实用方案:
方案一:在单因素回归表中直接添加分组统计量
这种方法会在回归表的每个分类水平行后,直接附上对应的事件数和总随访时长:
步骤1:加载包并构造可重复数据
library(survival) library(gtsummary) library(dplyr) library(glue) set.seed(123) # 设置随机种子保证结果可重复 df <- data.frame( time = sample(1:1000, 100, replace = TRUE), event = sample(0:1, 100, replace = TRUE), gender = sample(c("M", "F"), size = 100, replace = TRUE), stringsAsFactors = FALSE )
步骤2:定义统计量计算函数
自定义函数用于计算每个分组的事件数和总随访时长:
stat_event_time <- function(data, variable, ...) { data %>% group_by({{variable}}) %>% summarize( nevent = sum(event), total_time = sum(time), .groups = "drop" ) %>% mutate(stat = glue("事件数: {nevent}, 总随访时长: {total_time}")) %>% pull(stat) }
步骤3:生成带分组统计量的回归表
tbl_uvregression( df, method = survival::coxph, y = survival::Surv(time = time, event = event), include = gender # 可选:只展示gender变量,去掉则显示所有变量 ) %>% add_stat( fns = list(all_categorical() ~ stat_event_time), location = level # 指定统计量显示在每个分类水平行 ) %>% modify_header(stat_1 ~ "**事件数及随访时长**") %>% modify_column_unhide(stat_1) # 确保新添加的列可见
方案二:合并生存统计表与回归表
这种方法会先生成单独的生存统计表格(包含分组的N、事件数、随访时长),再与单因素回归表合并,展示更规整:
步骤1:生成生存统计表
surv_summary <- tbl_survfit( Surv(time, event) ~ gender, data = df, stat_display = c(n = "N", nevent = "事件数", total_time = "总随访时长") ) %>% modify_column_unhide(c(n, nevent, total_time)) # 显示默认隐藏的统计列
步骤2:生成单因素回归表
reg_summary <- tbl_uvregression( df, method = survival::coxph, y = survival::Surv(time = time, event = event), include = gender )
步骤3:合并两个表格
tbl_merge( list(surv_summary, reg_summary), tab_spanner = c("**生存统计信息**", "**单因素Cox回归结果**") )
两种方案都能满足你的需求,你可以根据表格展示的偏好选择。如果还有其他{gtsummary}的使用问题,随时可以提问~
内容的提问来源于stack exchange,提问作者Jay Achar
相关产品推荐
相关产品推荐

