R dplyr rolling Summe

ich bin die Implementierung eines rolling-Summe Berechnung durch dplyr, aber in meiner Datenbank habe ich eine Reihe von Variablen, die nur eine oder nur wenige Beobachtungen, so dass ein (k ist kleiner als n) Fehler. ich habe versucht, diese zu lösen in thisj Beispiel mit filter-und merge, aber Frage mich, ob es einen Weg gibt, um dies zu tun mehr aus und automatisch in dplyr. bitte schauen Sie sich das Beispiel unten

    #create data
    dg = expand.grid(site = c("Boston","New York"),
                     year = 2000:2004)
    dg$animal="dog"
    dg$animal[10]="cat";dg$animal=as.factor(dg$animal)
    dg$count = rpois(dim(dg)[1], 5) 

Wäre, wenn ich den code ausführen unter, weil ich nur eine Zeile mit "cat" ein, so erhält man die (Fehler: k <= n ist nicht wahr) Fehler

#running average
dg2 = dg %>%
  arrange(site,year,animal) %>%
  group_by(site,animal) %>%
#   filter(animal=="dog") %>%
  mutate(roll_sum = rollsum(x = count, 2, align = "right", fill = NA))

habe ich versucht zu lösen, indem mit dem folgenden code, der die Filter aus der "cat" - Wert und hat eine nachträgliche Verschmelzung, aber ich Frage mich, ob man das machen kann, direkt in dplyr, zumal bei dieser Lösung müsste man festlegen /wissen, die Anzahl der eindeutigen Zeilen für jede variable in advance und passen Sie manuell würde man den Bereich ändern, der rolling Summe, etc.

dg2 = dg %>%
  arrange(site,year,animal) %>%
  group_by(site,animal) %>%
  filter(animal=="dog") %>%
  mutate(roll_sum = rollsum(x = count, 2, align = "right", fill = NA))

merge(dg,dg2,c("site", "year","animal","count"),all.x=TRUE)

       site year animal count roll_sum
1    Boston 2000    dog     5       NA
2    Boston 2001    dog     6       11
3    Boston 2002    dog     6       12
4    Boston 2003    dog     5       11
5    Boston 2004    dog     3        8
6  New York 2000    dog     8       NA
7  New York 2001    dog     3       11
8  New York 2002    dog    12       15
9  New York 2003    dog     3       15
10 New York 2004    cat     3       NA

Vielen Dank - W

InformationsquelleAutor user1885116 | 2015-05-10

Schreibe einen Kommentar