R:根据第一次出现

时间:2018-05-16 02:52:47

标签: r grouping data-manipulation

我想根据事件列中“事故”的第一次出现来分配顺序组值(1-n)。因此,从一开始直到第一次事故,包括事故本身的所有事情都将是第1组。同样的原则将适用于下一组。你知道我怎么能在R中实现这个目标?谢谢!

enter image description here

1 个答案:

答案 0 :(得分:3)

我们执行逻辑表达式的lag并得到累积和

library(dplyr)
df1 %>%
    mutate(Group = cumsum(lag(Events == "Accident", default = TRUE)))
#     Events Group
#1         A     1
#2         A     1
#3         A     1
#4         B     1
#5         C     1
#6         A     1
#7         C     1
#8         B     1
#9  Accident     1
#10        C     2
#11        C     2
#12        C     2
#13        B     2
#14        A     2
#15 Accident     2
#16        C     3
#17        A     3
#18        A     3
#19        B     3
#20        B     3
#21 Accident     3

数据

df1 <- structure(list(Events = c("A", "A", "A", "B", "C", "A", "C", 
"B", "Accident", "C", "C", "C", "B", "A", "Accident", "C", "A", 
 "A", "B", "B", "Accident")), class = "data.frame", row.names = c(NA, 
-21L))