在R中创建时间到事件变量

在R中创建时间到事件变量,r,R,亲爱的大家:我一直在尝试创建一个时间到事件变量。事实上,不久前,我请求帮助。然而,我发现它并没有完全实现我的目的 下面是我的数据和要创建的变量“事件发生时间” 有人建议我使用以下代码来创建time to event变量 i1 <- with(df2, ave(Event, Country, FUN= function(x) cumsum(c(TRUE, diff(x)<0)))) df2$Time_to_event <- with(df2, ave(i1,

亲爱的大家:我一直在尝试创建一个时间到事件变量。事实上,不久前,我请求帮助。然而,我发现它并没有完全实现我的目的

下面是我的数据和要创建的变量“事件发生时间”

有人建议我使用以下代码来创建time to event变量

i1 <- with(df2, ave(Event, Country, FUN= 
         function(x) cumsum(c(TRUE, diff(x)<0))))
df2$Time_to_event <- with(df2, ave(i1, i1, Country, FUN= seq_along)-1)
相反,我希望它为事件变量在接下来的几年中为1的情况提供一个零(0)的值,而不是计算1的值 明确地说,这就是我希望看到“事件发生时间”变量的方式

Country  year              Event      **Time-to-event**
USA      2000               0            0
USA      2001               0            1
USA      2002               1            2
USA      2003               0            0
USA      2004               0            1
USA      2005               1            2
USA      2006               1            0
USA      2007               1            0
USA      2008               1            0
USA      2009               0            0
USA      2010               0            1

您可以使用
数据。表
如下所示:

require(data.table)
setDT(dat)[,tte := seq.int(0,.N-1L), by = cumsum(Event)-Event]
因此,你最终会:

 > dat
    Country year Event **Time-to-event** tte
 1:     USA 2000     0                 0   0
 2:     USA 2001     0                 1   1
 3:     USA 2002     1                 2   2
 4:     USA 2003     0                 0   0
 5:     USA 2004     0                 1   1
 6:     USA 2005     1                 2   2
 7:     USA 2006     1                 0   0
 8:     USA 2007     1                 0   0
 9:     USA 2008     1                 0   0
10:     USA 2009     0                 0   0
11:     USA 2010     0                 1   1
为什么?

让我们看一下组件:

 > dat[,.(Event, cumsum = cumsum(Event), run = cumsum(Event)-Event)]
    Event cumsum run
 1:     0      0   0
 2:     0      0   0
 3:     1      1   0
 4:     0      1   1
 5:     0      1   1
 6:     1      2   1
 7:     1      3   2
 8:     1      4   3
 9:     1      5   4
10:     0      5   5
11:     0      5   5

Event+cumsum将生成的运行次数相加。按此顺序分组使其有效。

Hi@flow0,谢谢与我分享。我尝试了这个方法,但它给出了一个错误:未使用的参数(by=rleid(cumsum(Event)-Event))。什么是“tte”?(时间到了,明白了!)
cumsum(shift(event,fill=1L))
是另一件你可以通过=
@FKG放入的东西,你需要
setDT(df2)
首先让错误消失<代码>tte
我想只是缩写了“活动时间”。谢谢@0。它最初不起作用,只是在我的数据中计算观察值。然后我取出了所有的NAs,它工作得很好。有没有办法说明NAs?您可以通过在
中指定多个列。因此,您可以通过=(state,cumsum(Event)-Event)执行

 > dat
    Country year Event **Time-to-event** tte
 1:     USA 2000     0                 0   0
 2:     USA 2001     0                 1   1
 3:     USA 2002     1                 2   2
 4:     USA 2003     0                 0   0
 5:     USA 2004     0                 1   1
 6:     USA 2005     1                 2   2
 7:     USA 2006     1                 0   0
 8:     USA 2007     1                 0   0
 9:     USA 2008     1                 0   0
10:     USA 2009     0                 0   0
11:     USA 2010     0                 1   1
 > dat[,.(Event, cumsum = cumsum(Event), run = cumsum(Event)-Event)]
    Event cumsum run
 1:     0      0   0
 2:     0      0   0
 3:     1      1   0
 4:     0      1   1
 5:     0      1   1
 6:     1      2   1
 7:     1      3   2
 8:     1      4   3
 9:     1      5   4
10:     0      5   5
11:     0      5   5