我有一個龐大的數據集,它具有個人以及日期的唯一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