我从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")
我正在寻找一种简洁的方法来创建一个数据框,其中三个列表成员为列,列为time
,n.risk
,n.event
(不是 fit$time
,fit$n.risk
,fit$n.event
)
因此,结果数据框应如下所示:
time n.risk n.event
[1,] 5 228 1
[2,] 11 227 3
[3,] 12 224 1
...
答案 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