通过R中的strata将具有不等向量长度的列表转换为数据帧

时间:2016-03-21 05:21:44

标签: r list dataframe

我有一个coxph函数的输出,由strata估计。我想将此输出从列表转换为数据框。我为coxph运行的代码如下:

k <- coxph(Surv(cum.goodp, dlq.next) ~ rpc.length + cluster(itemcode) + strata(sector), data = nr.sample)
m <- summary(survfit(k))

有20个不同的阶层用于估计coxph。这是列表的结构

List of 16
$ n        : int [1:20] 870 843 2278 603 6687 8618 15155 920 2598 654 ...
$ time     : num [1:870] 1 2 3 4 5 6 7 8 9 10 ...
$ n.risk   : num [1:870] 870 592 448 361 320 286 232 214 196 186 ...
$ n.event  : num [1:870] 246 126 77 34 33 25 18 18 8 6 ...
$ n.censor : num [1:870] 32 18 10 7 1 29 0 0 2 0 ...
$ strata   : Factor w/ 20 levels "sector=11","sector=21",..: 1 1 1 1 1 1 1 1 1 1 ...
$ surv     : num [1:870] 0.725 0.571 0.471 0.425 0.379 ...
$ type     : chr "right"
$ cumhaz   : num [1:870] 0.322 0.561 0.754 0.856 0.971 ...
$ std.err  : num [1:870] 0.015 0.017 0.0174 0.0174 0.0173 ...
$ upper    : num [1:870] 0.755 0.605 0.506 0.46 0.414 ...
$ lower    : num [1:870] 0.696 0.538 0.438 0.392 0.347 ...
$ conf.type: chr "log"
$ conf.int : num 0.95
$ call     : language survfit(formula = k)
$ table    : num [1:20, 1:7] 870 843 2278 603 6687 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:20] "sector=11" "sector=21" "sector=22" "sector=23" ...
.. ..$ : chr [1:7] "records" "n.max" "n.start" "events" ...
- attr(*, "class")= chr "summary.survfit"

我以前做过这个,但没有分层。当我没有分层时,我使用了以下方法:

col <- lapply(c(1 : 7), function(x) m[x])
tbl <- do.call(data.frame, col)

然而,当我在这里尝试这种方法时,我得到了熟悉的错误:

cannot coerce class "c("survfit.cox", "survfit")" to a data.frame

所有列都具有相同的名称,但它们的长度不同。如果可能的话,我想在最终数据框中添加一列,其中包含结果所针对的特定层。有没有办法做到这一点?它不必在基地R。任何帮助将不胜感激。非常感谢。

1 个答案:

答案 0 :(得分:1)

这个问题可以通过扫帚包中的整洁功能来解决。对于上面的示例,代码为:

n <- survfit(k)
df <- tidy(n)

整洁功能产生一个带有变量“strata”的数据框。但是,它没有提供中位数和均值,但如果有人倾向于它们,则可以从数据框df估计它们。如果幸存物体具有多个层次,则扫视(列表)不能提供中值或平均值。