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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie stattdessen verwenden
RcppRoll::roll_sum
gibt NA, wenn die Größe der Stichprobe(n
) kleiner ist als die Fenstergröße(k
).InformationsquelleAutor Khashaa
roll_Sum von RcppRoll zurück NA statt einen Fehler, wo die Anzahl der Datenpunkte sind kleiner als die Fenstergröße.
Allerdings, falls Sie zurückkehren möchten, die Summe der Anzahl der Daten-Punkte-Geschenk - wenn auch weniger als das Fenster die Größe, die Sie verwenden können, die rollapplyr Funktion von zoo.
Rollapply_sum wird es wieder den ursprünglichen Wert oder die Summe der Daten-Punkte-Geschenk, auch wenn es weniger als die Größe des Fensters anstatt NA.
InformationsquelleAutor Krupa Kapadia
InformationsquelleAutor Shenglin Chen