2012-01-20 41 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 

我:

在像蟒蛇,我可能有一個計數器和一個循環(僞上下的代碼)做到這一點覺得這應該是一個非常簡單的單線程,但我的大腦現在已經被打破了,而且我很難概念化這個。

回答

7

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

+0

好吧,地獄。那很快。這麼快,我不得不等待四分鐘才能接受這個答案!完美的作品。 – Peter

相關問題