每次满足条件时递增ID号

Pet*_*ter 2 r

我有一个数据集,我试图根据条件进入"事件".某些记录表明新事件已经开始,而其他类型的记录表示没有变化/保持过程.

例如,在此数据集中,"左"或"右"操作将指示新事件的开始:

|  Id | Action  |
|-----+---------|
|   1 | Left    |
|   2 | Forward |
|   3 | Forward |
|   4 | Right   |
|   5 | Forward |
|   6 | Left    |
| ... | ...     |
Run Code Online (Sandbox Code Playgroud)

我想要的结果表看起来像:

|  Id | Action  | GroupId |
|-----+---------+---------|
|   1 | Left    |       1 |
|   2 | Forward |       1 |
|   3 | Forward |       1 |
|   4 | Right   |       2 |
|   5 | Forward |       2 |
|   6 | Left    |       3 |
| ... | ...     |     ... |
Run Code Online (Sandbox Code Playgroud)

在类似python的东西中,我可以使用计数器和for循环(伪代码)来做到这一点:

GroupID = 1
for row in data:
    if Action == "Left" OR Action == "Right":
        GroupID = GroupID + 1
    else:
        GroupID = GroupID
Run Code Online (Sandbox Code Playgroud)

我觉得这应该是一个非常简单的单行,但我的大脑现在已经被打破了,我很难概念化这个.

Mar*_*gan 7

GroupId = cumsum(Action %in% c("Left", "Right"))