关于forvalues的等效命令

关于forvalues的等效命令,r,stata,R,Stata,如果我们有多个事件结果,像这样的长格式,实际数据包含许多ID,这是一个简化的数据 data <- data.frame(id=c(rep(1, 4), rep(2, 3), rep(3, 3)), event=c(1, 1, 0, 0, 1, 1, 0, 1, 1, 0), eventcount=c(1, 2, 0, 0, 1, 2, 0, 1, 2, 0), firstevent=c(1, 0

如果我们有多个事件结果,像这样的长格式,实际数据包含许多ID,这是一个简化的数据

data <- data.frame(id=c(rep(1, 4), rep(2, 3), rep(3, 3)), 
               event=c(1, 1, 0, 0, 1, 1, 0, 1, 1, 0), 
               eventcount=c(1, 2, 0, 0, 1, 2, 0, 1, 2, 0), 
               firstevent=c(1, 0, 0, 0, 1, 0, 0, 1, 0, 0), 
               time=c(100, 250, 150, 300, 240, 400, 150, 350, 700, 200) )
当我想在第一个事件开始后的特定时间内拿起事件时。在这种情况下,我希望在100-150天内检测到第二个事件。在斯塔塔,我们可以使用

gen event2=1 if id==id[_n-1]& time-time[_n-1]>100 & time-time[_n-1]<=150 & firstevent[_n-1]==1 & firstevent==0 & event==1
forvalues i = 2/3
{
replace event2=1 if id==id[_n-`i']& time-time[_n-`i']>100 &time-time[_n-`i']<=150 & firstevent[_n-`i']==1 & firstevent==0 & event==1
}
在这种情况下,

data_after <- data.frame(id=c(rep(1, 4), rep(2, 3), rep(3, 3)), 
                     event=c(1, 1, 0, 0, 1, 1, 0, 1, 1, 0),  
                     eventcount=c(1, 2, 0, 0, 1, 2, 0, 1, 2, 0),  
                     firstevent=c(1, 0, 0, 0, 1, 0, 0, 1, 0, 0), 
                     time=c(100, 250, 150, 300, 240, 400, 150, 350, 700, 200),  
                     event2=c(NA, 1, NA, NA, NA, NA, NA, NA, NA, NA))

我应该如何用R写这封信?

谢谢你的评论。我又补充了一个问题。如果您能帮助我,我将不胜感激。谢谢您的评论。我又补充了一个问题。如果你能帮助我,我将不胜感激。我想知道符合第一个结果持续时间的结果。不在中间。
intervals = ave(
    data$time,
    data$id,
    FUN = function(x)
        c(0, diff(x))
)
intervals
# [1]    0  150 -100  150    0  160 -250    0  350 -500

meets_duration_requirement = ave(
    intervals,
    data$id,
    FUN = function(x)
        x >= 100 & x <= 150
) == 1 & data$event == 1

choose_second = meets_duration_requirement == 1 &
    ave(meets_duration_requirement, data$id, FUN = seq_along) == 2 #if you want third event, change this to 3

replace(x = rep(NA, NROW(data)),
        list = choose_second,
        1)
# [1] NA  1 NA NA NA NA NA NA NA NA