R 从事件指示器变量计算到事件的时间

R 从事件指示器变量计算到事件的时间,r,data.table,R,Data.table,我想计算一个事件的相对时间。我有以下MWE: library(data.table) dt.MWE <- structure(list(Year = 2000:2015, Event = c(0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L,

我想计算一个事件的相对时间。我有以下MWE:

library(data.table)
dt.MWE <- structure(list(Year = 2000:2015, Event = c(0L, 0L, 0L, 0L, 1L, 
                                       0L, 0L, 0L, 0L, 0L,
                                       1L, 0L, 0L, 0L, 0L, 
                                       0L)), row.names = c(NA, -16L)
                            , class = c("data.table", "data.frame")
                             ,  index = structure(integer(0), "`__Year`" = integer(0)))

    Year Event
 1: 2000     0
 2: 2001     0
 3: 2002     0
 4: 2003     0
 5: 2004     1
 6: 2005     0
 7: 2006     0
 8: 2007     0
 9: 2008     0
10: 2009     0
11: 2010     1
12: 2011     0
13: 2012     0
14: 2013     0
15: 2014     0
16: 2015     0
另一种选择:

dt.MWE[, Time.to.Event := (1:.N) - c(0,.N)[sum(Event) + 1]
       , by = cumsum(shift(Event, fill = 0))][]
其中:

另一种选择:

dt.MWE[, Time.to.Event := (1:.N) - c(0,.N)[sum(Event) + 1]
       , by = cumsum(shift(Event, fill = 0))][]
其中:


我喜欢用
cumsum(Event)-Event
构造组var的聪明方法。我通常用两个
rev
。从joran这里得到了这个提示:)另一个选项:
dt.MWE[,Time.to.Event:=(1.N)-c(0.N)[sum(Event)+1],by=cumsum(shift(Event,fill=0)]
这个问题是否有更好的标题,更一般?也许“从事件指示器变量计算到事件的时间”?我喜欢用
cumsum(Event)-Event
构建集团var的聪明方法。我通常用两个
rev
。从joran这里得到了这个提示:)另一个选项:
dt.MWE[,Time.to.Event:=(1.N)-c(0.N)[sum(Event)+1],by=cumsum(shift(Event,fill=0)]
这个问题是否有更好的标题,更一般?也许“从事件指示器变量计算到事件的时间”有人说我不能超过一次。有人说我不能超过一次。
dt.MWE[, Time.to.Event := (1:.N) - c(0,.N)[sum(Event) + 1]
       , by = cumsum(shift(Event, fill = 0))][]
> dt.MWE
    Year Event Time.to.Event
 1: 2000     0            -4
 2: 2001     0            -3
 3: 2002     0            -2
 4: 2003     0            -1
 5: 2004     1             0
 6: 2005     0            -5
 7: 2006     0            -4
 8: 2007     0            -3
 9: 2008     0            -2
10: 2009     0            -1
11: 2010     1             0
12: 2011     0             1
13: 2012     0             2
14: 2013     0             3
15: 2014     0             4
16: 2015     0             5