每次满足条件时递增ID号

时间:2012-01-20 02:43:55

标签: r

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

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

|  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

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

1 个答案:

答案 0 :(得分:7)

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