将“幸存”对象的某些元素提取到数据框中的简明方法

时间:2017-06-15 07:01:03

标签: r list dataframe

我从survival库加载数据集,并生成survfit对象:

library(survival)
data(lung)
lung$SurvObj <- with(lung, Surv(time, status == 2))
fit <- survfit(SurvObj ~ 1, data = lung, conf.type = "log-log")

此对象是一个列表:

> str(fit)
List of 13
 $ n        : int 228
 $ time     : int [1:186] 5 11 12 13 15 26 30 31 53 54 ...
 $ n.risk   : num [1:186] 228 227 224 223 221 220 219 218 217 215 ...
 $ n.event  : num [1:186] 1 3 1 2 1 1 1 1 2 1 ...
 ...

现在我指定一些我想要变成数据框的成员(所有长度相同):

members <- c("time", "n.risk", "n.event") 

我正在寻找一种简洁的方法来创建一个数据框,其中三个列表成员为列,列为timen.riskn.event不是 fit$timefit$n.riskfit$n.event

因此,结果数据框应如下所示:

           time     n.risk       n.event
  [1,]        5        228             1
  [2,]       11        227             3
  [3,]       12        224             1
  ...

4 个答案:

答案 0 :(得分:4)

这没关系

data.frame(unclass(fit)[members])

另一种(更规范)的方式是

with(fit, data.frame(time, n.risk, n.event))

答案 1 :(得分:2)

broom包中包含用于整理回归模型结果并将其呈现在类data.frame的对象中的函数。对于那些不熟悉整洁哲学的人,请参阅Tidy data [ 1 ]

library(broom)
#create tidy dataframe and subset by the columns saved in members
df <- tidy(fit)[,members]
head(df)
#  time n.risk n.event
#1    5    228       1
#2   11    227       3
#3   12    224       1
#4   13    223       2
#5   15    221       1
#6   26    220       1

[1]威克姆,哈德利。 “整洁的数据。”统计软件期刊[在线],59。10(2014):1 - 23.网络。 2017年6月16日

答案 2 :(得分:0)

使用cbind绑定数据帧,然后使用名称来更改列的名称

TLS1.1

答案 3 :(得分:0)

library(survival)
data(lung)
lung$SurvObj <- with(lung, Surv(time, status == 2))
fit <- survfit(SurvObj ~ 1, data = lung, conf.type = "log-log")
str(fit)
members<-data.frame(time=fit$time,n.risk=fit$n.risk,n.event=fit$n.event)
members