使用顺序数据在dplyr中标记条件事件

Jim*_*myT 5 r dplyr

在下面的示例中,事件开始定义为“值”的先前值大于等于90并且当前值小于90。事件结束表示当前值小于90而下一个值大于等于90。 。

sequential_index <- seq(1,10)
values <- c(91,90,89,89,90,90,89,88,90,91)
df <- data.frame(sequential_index, values)
Run Code Online (Sandbox Code Playgroud)

从上面的示例中的df看,第一个事件发生在观察值3-4,第二个事件发生在观察值7-8。我试图,无济于事,在上面的数据框中添加一个“事件”列,看起来像这样:

       sequential_index values events
1                 1     91     NA
2                 2     90     NA
3                 3     89      1
4                 4     89      1
5                 5     90     NA
6                 6     90     NA
7                 7     89      2
8                 8     88      2
9                 9     90     NA
10               10     91     NA
Run Code Online (Sandbox Code Playgroud)

我的数据集很大,我正在尝试避免for循环。
在此先感谢-jt

Jet*_*Jet 3

我有这个解决方案,使用dplyr.

library(dplyr)

df %>%
# Define the start of events (putting 1 at the start of events)
mutate(events = case_when(lag(values)>=90 & values<90 ~ 1, TRUE ~ 0)) %>%
# Extend the events using cumsum()
mutate(events = case_when(values<90 ~ cumsum(events)))
Run Code Online (Sandbox Code Playgroud)

输出 :

   sequential_index values events
1                 1     91     NA
2                 2     90     NA
3                 3     89      1
4                 4     89      1
5                 5     90     NA
6                 6     90     NA
7                 7     89      2
8                 8     88      2
9                 9     90     NA
10               10     91     NA
Run Code Online (Sandbox Code Playgroud)