2

このサバイバル モデルを作成しました (複数の曲線を使用)。

obj <- with(subscriptions, Surv(time=life_time, event=status, type="right"))
fit <- survfit(obj~sales_month, data=subscriptions)

..そして結果のフィットオブジェクトは結果を に保存しますfit$surv。ただし、私の場合、生存推定の長さは、さまざまな曲線/グループで等しくありません。さまざまな曲線の長さは にありfit$strataます。

基本的に、データは次のようになります。

fit$surv <- 1:10
1  2  3  4  5  6  7  8  9 10

fit$strata <- c(5,3,2)
names(fit$strata) <- LETTERS[1:3]
A B C 
5 3 2

data.tableこのデータを同じグループ長に抽出する必要があります..

strata   surv
A        1
A        2
A        3
A        4
A        5
B        6
B        7
B        8
B        NA
B        NA
C        9
C        10
C        NA
C        NA
C        NA

これを行う簡単な方法はありますか?または、明らかなことを完全に見逃していますか?

4

2 に答える 2

1

あなたが探していることを実行する事前定義された関数は知りませんが、それに対するソリューションをかなり簡単にハックすることができます. 単純とは言えないかもしれませんが、効率的に仕事をこなすことができます。

attach(fit)
n <- max(strata)
rbindlist(mapply(function(st, su){
    data.table(strata = rep(st, n),
               surv = c(su, rep(NA, n - length(su))))
}, names(strata), split(surv, rep(names(strata), strata)), SIMPLIFY=FALSE))

基本的には、 の値をに基づいて個別のベクトルに分割し、それぞれに対して固定数の行を持つdata.tableを作成し、最後にそれらをすべてrbindlistでスタックします。survstratan

    strata surv
 1:      A    1
 2:      A    2
 3:      A    3
 4:      A    4
 5:      A    5
 6:      B    6
 7:      B    7
 8:      B    8
 9:      B   NA
10:      B   NA
11:      C    9
12:      C   10
13:      C   NA
14:      C   NA
15:      C   NA
于 2013-09-24T09:55:38.370 に答える