2017-06-19 130 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