将多个 survfit() 输出提取到表中

问题描述

我找到了一些关于如何将单个 survfit 提取到表中的页面。但是,我想将多个摘要提取到单个 kable(或其他表格格式,如有必要)。我将多个拟合组合到一个 ggsurvplot_combine 列表中,并希望在 R Markdown 中的单个表格中直接汇总它们。

我使用 lung 数据集创建了一个 reprex,它模仿了我为分析所做的工作。

代码

kmcombo_sex <- survfit(Surv(time,status) ~ sex,data = lung)
kmcombo_ph.ecog <- survfit(Surv(time,status) ~ ph.ecog,data = lung)
 
lung2 <- lung %>%
     mutate(kps_ord = case_when(
         ph.karno > 70 ~ 3,ph.karno > 50 ~ 2,TRUE ~ 1
     ))
 
kmcombo_kps <- survfit(Surv(time,status) ~ kps_ord,data = lung2)
 
kmlistexample <- list(kmcombo_sex,kmcombo_ph.ecog,kmcombo_kps)
kmlistexample

输出

kmlistexample
[[1]]
Call: survfit(formula = Surv(time,data = lung)

        n events median 0.95LCL 0.95UCL
sex=1 138    112    270     212     310
sex=2  90     53    426     348     550

[[2]]
Call: survfit(formula = Surv(time,data = lung)

   1 observation deleted due to missingness 
            n events median 0.95LCL 0.95UCL
ph.ecog=0  63     37    394     348     574
ph.ecog=1 113     82    306     268     429
ph.ecog=2  50     44    199     156     288
ph.ecog=3   1      1    118      NA      NA

[[3]]
Call: survfit(formula = Surv(time,data = lung2)

            n events median 0.95LCL 0.95UCL
kps_ord=1   7      6    122     105      NA
kps_ord=2  51     45    212     163     310
kps_ord=3 170    114    353     305     428

当我尝试传统方式时,我得到一个 survfit 对象的嵌套列表:

kmlistexample_sum <- summary(kmlistexample)
kmlistexample_sum 
     Length Class   Mode
[1,] 17     survfit list
[2,] 18     survfit list
[3,] 17     survfit list

在使用 summary 函数之前,我也尝试取消列出,但无济于事:

kmlistexample_sum <- summary(unlist(kmlistexample))

如果所有其他方法都失败了,我可以返回到每个 survfit 对象并单独提取我需要的内容。我希望可能有更简单的方法

解决方法

发现 surv_median 函数(survminer 包的一部分)将汇总中值和 95%CI 并可以存储在新对象中。我用于 R Markdown 的代码如下:

require(knitr)

surv_median(kmlistexample) %>% 
  kable()

结果(根本没有调整美感):

|strata | median| lower| upper|
|:------|------:|-----:|-----:|
|sex=1  |    270|   212|   310|
|sex=2  |    426|   348|   550|

|strata    | median| lower| upper|
|:---------|------:|-----:|-----:|
|ph.ecog=0 |    394|   348|   574|
|ph.ecog=1 |    306|   268|   429|
|ph.ecog=2 |    199|   156|   288|
|ph.ecog=3 |    118|    NA|    NA|

|strata    | median| lower| upper|
|:---------|------:|-----:|-----:|
|kps_ord=1 |    122|   105|    NA|
|kps_ord=2 |    212|   163|   310|
|kps_ord=3 |    353|   305|   428|