R 跟踪每个组中是否发生了事件

R 跟踪每个组中是否发生了事件,r,R,我当前遇到代码问题。作为一个初学者,我真的找不到解决办法 library(data.table) id<- c(rep(1,5), rep(2,5),rep(3,5)) time <-c (1,2,3,4,5,1,2,3,4,5,1,2,3,4,5) death <-c(0,1,0,1,1,0,0,1,1,0,0,1,1,0,1) table<-data.table(id, time, death) 这似乎是一个相当常见的错误,但尽管如此,我无法使我的代码正常工作。 非

我当前遇到代码问题。作为一个初学者,我真的找不到解决办法

library(data.table)
id<- c(rep(1,5), rep(2,5),rep(3,5))
time <-c (1,2,3,4,5,1,2,3,4,5,1,2,3,4,5)
death <-c(0,1,0,1,1,0,0,1,1,0,0,1,1,0,1)
table<-data.table(id, time, death)
这似乎是一个相当常见的错误,但尽管如此,我无法使我的代码正常工作。
非常感谢能帮助我的人

这里有一个带有
ave

> with(table,as.numeric(ave(death,id,FUN = cumsum)>0))
 [1] 0 1 1 1 1 0 0 1 1 1 0 1 1 1 1

这是一个带有
ave

> with(table,as.numeric(ave(death,id,FUN = cumsum)>0))
 [1] 0 1 1 1 1 0 0 1 1 1 0 1 1 1 1

R中有很多函数可以帮助您进行这样的分组数据操作。对于或
while
循环,不需要显式的

由于
death\u理想值
为1后仍为1,因此这里您可以取
cummax
,它是每个
id
的累积最大值

这可以在
data.table
中完成

library(data.table)
table[, death_ideal := cummax(death), id]
table

#    id time death death_ideal
# 1:  1    1     0           0
# 2:  1    2     1           1
# 3:  1    3     0           1
# 4:  1    4     1           1
# 5:  1    5     1           1
# 6:  2    1     0           0
# 7:  2    2     0           0
# 8:  2    3     1           1
# 9:  2    4     1           1
#10:  2    5     0           1
#11:  3    1     0           0
#12:  3    2     1           1
#13:  3    3     1           1
#14:  3    4     0           1
#15:  3    5     1           1
在R底

table$death_ideal <- with(table, ave(death, id, FUN = cummax))

R中有很多函数可以帮助您进行这样的分组数据操作。对于
while
循环,不需要显式的

由于
death\u理想值
为1后仍为1,因此这里您可以取
cummax
,它是每个
id
的累积最大值

这可以在
data.table
中完成

library(data.table)
table[, death_ideal := cummax(death), id]
table

#    id time death death_ideal
# 1:  1    1     0           0
# 2:  1    2     1           1
# 3:  1    3     0           1
# 4:  1    4     1           1
# 5:  1    5     1           1
# 6:  2    1     0           0
# 7:  2    2     0           0
# 8:  2    3     1           1
# 9:  2    4     1           1
#10:  2    5     0           1
#11:  3    1     0           0
#12:  3    2     1           1
#13:  3    3     1           1
#14:  3    4     0           1
#15:  3    5     1           1
在R底

table$death_ideal <- with(table, ave(death, id, FUN = cummax))

非常感谢你!我使用了你的第二个解决方案(以R为基数),这对我来说更有效。但有一个小细节,我不明白的公式。R如何知道它必须查看time列,因为在公式中time列不存在。再次感谢您的帮助。我的答案中没有显示时间栏。我假设
time
列始终按示例所示进行排序。如果不是,您可能需要在应用答案之前对数据进行排序。明白,我已经这样做了。非常感谢您的帮助,它似乎工作得很好!非常感谢你!我使用了你的第二个解决方案(以R为基数),这对我来说更有效。但有一个小细节,我不明白的公式。R如何知道它必须查看time列,因为在公式中time列不存在。再次感谢您的帮助。我的答案中没有显示时间栏。我假设
time
列始终按示例所示进行排序。如果不是,您可能需要在应用答案之前对数据进行排序。明白,我已经这样做了。非常感谢您的帮助,它似乎工作得很好!
table %>% group_by(id) %>% mutate(death_ideal = cummax(death))