3 Stimmen

Überschneidende Gruppen in dplyr

Ich versuche, "rolling" Zusammenfassungsstatistiken basierend auf einem Gruppierungsfaktor zu berechnen. Gibt es einen einfachen Weg, nach (überlappenden) Gruppen zu verarbeiten, basierend auf (sagen wir) einem geordneten Faktor?

Zum Beispiel, sagen wir, ich möchte die Summe von val nach Gruppen berechnen

df <- data.frame(grp = c("a", "a", "b", "b", "c", "c", "c"),
                 val = rnorm(7))

Für Gruppen basierend auf grp ist es einfach:

df %>% group_by(grp) %>% summarise(total = sum(val))

# Ergebnis:
  grp   total
1   a  1.6388
2   b  0.7421
3   c  1.1707

Was ich jedoch tun möchte, ist "rolling" Summen für aufeinanderfolgende Gruppen ("a" & "b", dann "b" & "c", usw.) zu berechnen. Die gewünschte Ausgabe wäre so etwas wie dies:

  grp1 grp2   total
1    a    b  1.6388
2    b    c  0.7421

Ich habe Schwierigkeiten, dies in dplyr zu tun. Insbesondere kann ich anscheinend nicht herausfinden, wie man "überlappende" Gruppen erhält - die "b" Zeilen im obigen Beispiel sollten in zwei Ausgabegruppen landen.

6voto

G. Grothendieck Punkte 232059

Versuche lag:

df %>%
   group_by(grp) %>%
   arrange(grp) %>%
   summarise(total = sum(val)) %>%
   mutate(grp1 = lag(grp), grp2 = grp, total = total + lag(total)) %>%
   select(grp1, grp2, total) %>%
   na.omit

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X