2016-09-30 25 views
1

我有问题来分析我的生存数据集。我会将数据集的dput输出放在github链接中,以避免污染问题。生存分析中的生存时间

下面是数据https://gist.github.com/anonymous/4fdff1c6d0853c41939e2a67d9e0e45b

在这个数据集,我想为每个组生存曲线的情节,所以我需要做一个survfit()模型。

变量W1,W2,...,W43代表星期,数字代表某种度量。当我在任何一个星期一个点.,这意味着个人认为星期因此遵循与点.

被标记在生存模式这死亡表示事件(失败)每周死了,如果个人生存他所有的几个星期他代表一个审查数据。

为了生存模式,我知道我需要有以下

time=c(3,4,8,8,5,2) 
event=c(1,1,0,0,1,1) 
在这种情况下,时间

数据这样的方式代表了死亡的时间在周事件是1,如果死亡和0,如果审查。

编辑:我想到了一种可能的解决方案,但我不知道我该怎么做。我们的想法是低于

1)采取所有列W1,W2,...,W43并把1如果一个号码,把0,如果它是一个点.

2)创建一个新的变量,代表时间,这个变量的值将是W1到W43列的总和,所以它将会是W1 + W2 + ... + W43。

3)创建一个代表事件的新变量,那么如果时间= 43,这意味着个人一直存活下来,那么它将是0(审查),如果如果小于43,这意味着个人死亡,那么变量将为1.

任何人都可以帮助我做到这一点?

+0

新的建议可能也适用。如果您喜欢总结'is.numeric(as.numeric(row_values))'的数量,那么请继续并发布答案。我猜你会学到很多关于使用'apply'的陷阱,但这对R-newb来说是一个很好的练习。 (但是我碰巧想用'which(condition)[1]'是更多的R-ish编码风格。) –

回答

1

我命名你的数据集SDAT这些操作添加了另外两列:

sdat$time= apply(sdat[ ,grepl("W", names(sdat))], 1 , #work by rows on "W"-columns 
        function(r) which(r==".")[1]) # seq-number of first "." 
sdat$event <- as.numeric(!is.na(sdat$time)) # convert NA's to logical and to 1,0 
sdat$time= ifelse(is.na(sdat$time) , 43, sdat$time) # set time to 43 for survivors 

# Check results 
head(sdat[ , !grepl("W", names(sdat))]) # remove "W" cols 
    Group Ref Sex M1 M2 M3 M4 time event 
1 11 4 1 959 1940 10 184 23  1 
2 11 4 1 960 1770 10 189 31  1 
3 11 4 1 961 1970 10 166 23  1 
4 11 4 1 962 1870 1 180 43  0 
5 11 4 1 964 1780 11 239 43  0 
6 12 4 1 966 1980 11 182 43  1 

作为一个分析师,我将问什么意思附加到不同的“W” - 值导致到死亡,但那不是你的问题。

+0

你能检查我最后一次编辑吗?它看起来像我有同样的想法。 – Roland