2012-01-20 14 views
2

条件に基づいて「イベント」にチャンクしようとしているデータセットがあります。いくつかの種類のレコードは、新しいイベントが開始したことを示しますが、他の種類のレコードは、コースの変更/滞在を表しません。このデータセットでは、「左」または「右」のアクションは、新しいイベントの開始を示すことになる。例えば条件が満たされるたびにID番号を増やす

、:

| 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 | 
| ... | ...  |  ... | 

GroupID = 1 
for row in data: 
    if Action == "Left" OR Action == "Right": 
     GroupID = GroupID + 1 
    else: 
     GroupID = GroupID 

I:pythonのようなもので、私はカウンターとforループ(擬似っぽいコード)でこれを行う可能性があります

これは本当にシンプルな1ライナーでなければならないと感じていますが、私の脳は今すぐ壊れており、私はこれを概念化するのに苦労しています。

答えて

7

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

+0

まあ、地獄。それは速かった。私はこの答えを受け入れるためにさらに4分待たなければならないほど速いです!完璧に動作します。 – Peter

関連する問題