Ich implementiere eine rollende Summenberechnung durch dplyr, aber in meiner Datenbank habe ich eine Anzahl von Variablen, die nur eine oder nur wenige Beobachtungen haben, was einen (k ist kleiner als n) Fehler verursacht. Ich habe versucht, dies in diesem Beispiel mit Filter und Zusammenführen zu lösen, aber frage mich, ob es eine Möglichkeit gibt, dies eleganter und automatischer innerhalb von dplyr zu tun. bitte das folgende BeispielR dplyr rollende Summe
#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)
sehen, ob ich den Code unten laufen würde, weil ich mit „cat“ nur eine Zeile haben, 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))
Ich habe versucht, dies zu lösen, indem Sie den folgenden Code verwenden, der den "cat" -Wert herausfiltert und eine anschließende Zusammenführung, aber ich frage mich, ob man dies direkt in dplyr tun kann, vor allem wie in dieser Lösung hätte um die Anzahl eindeutiger Zeilen für jede Variable im Voraus anzugeben/zu kennen und manuell anzupassen, wenn man den Bereich der rollenden Summe usw. ändern würde.
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
Dies bietet keine Antwort auf die Frage –