我是R noob,並且試圖對數據集執行摘要,該數據集對該ID的類型「B」的事件之間發生的每個ID總計事件類型的數量。下面是一個示例來說明:基於日期的dplyr中的條件彙總
id <- c('1', '1', '1', '2', '2', '2', '3', '3', '3', '3')
type <- c('A', 'A', 'B', 'A', 'B', 'C', 'A', 'B', 'C', 'B')
datestamp <- as.Date(c('2016-06-20','2016-07-16','2016-08-14','2016-07-17'
,'2016-07-18','2016-07-19','2016-07-16','2016-07-19'
, '2016-07-21','2016-08-20'))
df <- data.frame(id, type, datestamp)
其產生:
> df
id type datestamp
1 1 A 2016-06-20
2 1 A 2016-07-16
3 1 B 2016-08-14
4 2 A 2016-07-17
5 2 B 2016-07-18
6 2 C 2016-07-19
7 3 A 2016-07-16
8 3 B 2016-07-19
9 3 C 2016-07-21
10 3 B 2016-08-20
事件「B」發生的任何時間,我想知道的是乙事件之前發生的每個事件類型的數量,但在該ID的任何其他B事件之後。 我想直到結束是這樣的一個表:
id type B_instance count
1 1 A 1 2
2 2 A 1 1
3 3 A 1 1
4 3 C 2 1
在研究,這個問題就來了最靠近:summarizing a field based on the value of another field in dplyr
我一直在努力使這項工作:
df2 <- df %>%
group_by(id, type) %>%
summarize(count = count(id[which(datestamp < datestamp[type =='B'])])) %>%
filter(type != 'B')
但它錯誤(即使它工作,它也不會在同一個ID中佔用2'B'事件,例如id = 3)
這個完美的作品!謝謝!出於好奇,爲什麼cumsum需要也由1? – feyr
遞增以匹配實例數,否則將從零開始,而結果會像'0,0,0,1'而不是'1,1,1,2'。 – Psidom