2017-06-19 27 views
0

中的標準的行我有一個標準的數據框,我有個人在一段時間內執行某種行爲。當事件發生在前一次事件發生後的50秒內(延遲< = 50),我想將它與以前的事件結合起來。也就是說,每個事件都會有NA延遲(第一次事件)或延遲> 50。開始時間將是第一個事件的開始時間(NA或> 50),結束時間將是最後事件< = 50(參見下面的數據示例)。我還想在綜合事件中得出X1的總和。希望下面的數據能夠清楚地說明我在找什麼。結合符合R

原始數據:

ID   Incident Start End  X1 Delay 
Person A 1   747  748  735 NA 
Person A 2   868  882  384 120 
Person A 3   998  999  354 116 
Person A 4   1057 1059 382 58 
Person A 5   1063 1064 138 4 
Person A 6   1077 1078 138 13 
Person A 7   1412 1413 384 334 
Person B 1   739  740  387 NA 
Person B 2   742  743  132 2 
Person B 3   760  761  386 17 
Person B 4   768  769  731 7 
Person B 5   835  835  894 66 
Person B 6   838  839  891 3 
Person B 7   925  926  385 86 

所需數據:

ID   Iteration Start End  X1  Delay 
Person A 1   747  748  735  NA 
Person A 2   868  882  384  120 
Person A 3   998  999  354  116 
Person A 4   1057 1078 658  58 
Person A 5   1412 1413 384  334 
Person B 1   739  769  1636 NA 
Person B 2   835  839  1785 66 
Person B 3   925  926  385  86 

我已經試過許多東西,問題是我不能總用ID,因爲同一個人可能有兩個單獨的事件。

謝謝!並讓我知道你是否需要更多信息。

+0

有爲什麼人A,事件7不包括一個原因是什麼? –

回答

0

我認爲你在你想要的結果表中有錯誤。第5行應該是Person A.

以下是使用dplyr來完成此操作的一種方法。理由是我們首先使用cumsum聯合使用indicents。如果延遲> 50或NA,則事件編號將增加1。然後,我們summarise在這個新的事件列。

df%>% 
    group_by(ID)%>% 
    mutate(Incident=cumsum(Delay>50|is.na(Delay)))%>% 
    group_by(ID,Incident)%>% 
    summarise(Start=first(Start),End=last(End),X1=sum(X1),Delay=first(Delay)) 

     ID Incident Start End X1 Delay 
    <chr> <int> <int> <int> <int> <int> 
1 PersonA  1 747 748 735 NA 
2 PersonA  2 868 882 384 120 
3 PersonA  3 998 999 354 116 
4 PersonA  4 1057 1078 658 58 
5 PersonA  5 1412 1413 384 334 
6 PersonB  1 739 769 1636 NA 
7 PersonB  2 835 839 1785 66 
8 PersonB  3 925 926 385 86 

數據

df <- read.table(text="ID Incident Start End X1 Delay 
PersonA 1   747  748  735 NA 
PersonA 2   868  882  384 120 
PersonA 3   998  999  354 116 
PersonA 4   1057 1059 382 58 
PersonA 5   1063 1064 138 4 
PersonA 6   1077 1078 138 13 
PersonA 7   1412 1413 384 334 
PersonB 1   739  740  387 NA 
PersonB 2   742  743  132 2 
PersonB 3   760  761  386 17 
PersonB 4   768  769  731 7 
PersonB 5   835  835  894 66 
PersonB 6   838  839  891 3 
PersonB 7   925  926  385 86",header=TRUE,stringsAsFactors=FALSE) 
+0

完美的回覆。我更正了「期望結果表」中的錯誤。 – Fargonian

+0

這正是我所期待的。我還有一個問題。現在,當Delay <50閾值被滿足時,它將它與之前的事件結合起來(這正是我想要做的)。您如何更改代碼以將其與後續事件相結合?例如,在所需的數據中,與第4行相反,變量X1是658,它將保持382,第5行Person A變量X1將是660(138 +138 + 384)。那有意義嗎? – Fargonian