2016-09-30 185 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