在R中创建时间到事件变量
亲爱的大家:我一直在尝试创建一个时间到事件变量。事实上,不久前,我请求帮助。然而,我发现它并没有完全实现我的目的 下面是我的数据和要创建的变量“事件发生时间” 有人建议我使用以下代码来创建time to event变量在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,
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