Ich bin ein R noob und versuche, eine Zusammenfassung für ein Dataset durchzuführen, die die Anzahl der Ereignistypen für jede ID umfasst, die zwischen Ereignissen vom Typ 'B' für diese ID aufgetreten ist . Hier ist ein Beispiel zur Veranschaulichung:Bedingte Zusammenfassung von Gruppen in dplyr basierend auf dem Datum
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)
, die produziert:
> 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
Jedes Mal, wenn ein Ereignis ‚B‘ auf, ich die Anzahl der jeden Ereignistyp wissen wollen, die vor diesem B Ereignis aufgetreten ist, aber nach anderen B-Ereignissen für diese ID. Was möchte ich mit, um am Ende eine Tabelle wie folgt aus:
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
in der Erforschung, diese Frage kam in der Nähe: summarizing a field based on the value of another field in dplyr
Ich habe versucht, diese Arbeit zu machen:
df2 <- df %>%
group_by(id, type) %>%
summarize(count = count(id[which(datestamp < datestamp[type =='B'])])) %>%
filter(type != 'B')
Aber es Fehler aus (auch, selbst wenn es funktioniert, ist es nicht berücksichtigt 2 Ereignisse ‚B‘ in der gleichen ID, wie mit id = 3)
das funktioniert perfekt! Danke! aus Neugier, warum die Instanz erhöht werden muss cumsum müssen von 1? – feyr
Passend zu zählen, sonst wird es von Null anfangen, und das Ergebnis wird sei wie "0,0,0,1" statt "1,1,1,2". – Psidom