我有一个标准的数据框架,我有个人在一段时间内做某种行为。当事件发生在前一次事件的50秒内(延迟<= 50)时,我想将其与之前的事件结合起来。也就是说,每个事件都会有NA的延迟(第一次事故)或延迟> 50。然后,开始时间将是第一次事件的开始时间(NA或> 50),结束时间将是最后一次事件的结束时间&lt; = 50(参见下面的数据示例)。我还想在合并事件中加上X1的总和。希望下面的数据能够准确地说明我在寻找什么。
原始数据:
30
所需数据:
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聚合,因为同一个人可能有两个单独的事件。
谢谢!如果您需要更多信息,请告诉我。
答案 0 :(得分:0)
我认为你想要的结果表中有错误。第5行应该是人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)