我有一个数据集,我正在尝试根据条件进入“事件”。某些类型的记录表明新事件已经开始,而其他类型的记录表示没有变化/保持过程。
例如,在此数据集中,“左”或“右”操作将指示新事件的开始:
| Id | Action |
|-----+---------|
| 1 | Left |
| 2 | Forward |
| 3 | Forward |
| 4 | Right |
| 5 | Forward |
| 6 | Left |
| ... | ... |
我想要的结果表如下:
| Id | Action | GroupId |
|-----+---------+---------|
| 1 | Left | 1 |
| 2 | Forward | 1 |
| 3 | Forward | 1 |
| 4 | Right | 2 |
| 5 | Forward | 2 |
| 6 | Left | 3 |
| ... | ... | ... |
在像python这样的东西中,我可以使用计数器和for循环(伪代码)来执行此操作:
GroupID = 1
for row in data:
if Action == "Left" OR Action == "Right":
GroupID = GroupID + 1
else:
GroupID = GroupID
我觉得这应该是一个非常简单的单行,但我的大脑现在已被打破,我很难将其概念化。
答案 0 :(得分:7)
GroupId = cumsum(Action %in% c("Left", "Right"))