Увеличение идентификационного номера при каждом выполнении условия - PullRequest
2 голосов
/ 20 января 2012

У меня есть набор данных, который я пытаюсь разделить на «события», основанные на условии. Некоторые виды записей указывают, что новое событие началось, в то время как другие виды записей не представляют изменений / оставаясь на курсе.

Например, в этом наборе данных действие «Влево» или «Вправо» будет указывать на начало нового события:

|  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 Ответ

7 голосов
/ 20 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...