我有一个庞大的数据集,它具有个人以及日期的唯一ID,并且每个人都能够多次遇到。R:通过ID汇总历史记录日期
下面是代码和这个数据可能外观的示例:
strDates <- c("09/09/16", "6/7/16", "5/6/16", "2/3/16", "2/1/16", "11/8/16",
"6/8/16", "5/8/16","2/3/16","1/1/16")
Date<-as.Date(strDates, "%m/%d/%y")
ID <- c("A", "A", "A", "A","A","B","B","B","B","B")
Event <- c(1,0,1,0,1,0,1,1,1,0)
sample_df <- data.frame(Date,ID,Event)
sample_df
Date ID Event
1 2016-09-09 A 1
2 2016-06-07 A 0
3 2016-05-06 A 1
4 2016-02-03 A 0
5 2016-02-01 A 1
6 2016-11-08 B 0
7 2016-06-08 B 1
8 2016-05-08 B 1
9 2016-02-03 B 1
10 2016-01-01 B 0
我想保持每遇到的所有附属信息,但随后汇总由ID下面的历史信息
- 以前的遭遇人数
- 前期活动数量
举例来说,让我们看第2行。
第2行是ID A,因此我会引用第3-5行(发生在第2行遭遇之前)。在这组行中,我们看到Row 3 & 5都有事件发生。
上遭遇的号排2 = 3
为行2之前的活动数= 2
理想情况下,我会得到下面的输出:
Date ID Event PrevEnc PrevEvent
1 2016-09-09 A 1 4 2
2 2016-06-07 A 0 3 2
3 2016-05-06 A 1 2 1
4 2016-02-03 A 0 1 1
5 2016-02-01 A 1 0 0
6 2016-11-08 B 0 4 3
7 2016-06-08 B 1 3 2
8 2016-05-08 B 1 2 1
9 2016-02-03 B 1 1 0
10 2016-01-01 B 0 0 0
到目前为止,我已经尝试在dplyr中通过mutate和总结来解决这个问题,两者都没有让我成功地将我的聚合限制为以前针对特定ID发生的事件。我用If-then语句尝试了一些乱七八糟的For循环,但真的只是想知道是否有包或技术来简化这个过程。
谢谢!
'0:(n()-1)'是'row_number() - 1L'?另外,我猜orig index可以是'row_number()'。 – Frank
是的,@Frank - 这些应该是等价的。我不知道为什么我没有更频繁地使用'row_number()'。有可能是一种懒惰的预习式方法。 –
谢谢你非常有帮助的方式来查看这个!滞后是def。我不知道的东西,现在很高兴收到! – EntryLevelR