Rollapply mit dem „wachsenden“ Fenster
Frage
Leute, normalerweise, wenn du so etwas wiest:
tmp = zoo(rnorm(100), 1:100)
rollapply(tmp, 10, function(x) quantile(x, 0.05), align="right")
Schon richtig rollapply
wird den Wert ab dem Moment berechnen. 10 Elemente sind verfügbar.
Leider brauche ich etwas, das so viele Daten wie möglich für die Faust 10 Beobachtungen verwendet, im Wesentlichen ein wachsendes Datenfenster, bis genügend Daten verwendet werden, um ein Gleitfenster zu verwenden, z. B. 1: 2, 1: 3, 1: 4 usw. . Bis wir mindestens 10 Elemente haben und dann das Fenster wie gewohnt schieben.
Gibt es einen besseren Weg, dies zu tun als ein hässliches für die Schleife?
Lösung
Warum nicht einfach die Serie mit 9 NAS am Anfang padieren? Auf jeden Fall besser als "hässlich für Schleifen":
tmp = zoo(c(rep(NA,9), rnorm(100)), 1:109)
zoo(rollapply(tmp, 10, function(x) quantile(x, 0.05, na.rm = TRUE),
align="right"), 1:100)
Andere Tipps
rollapply
Im Zoo kann dies durch Angebenheit tun partial=TRUE
, z.B
> library(zoo)
>
> rollapplyr(zoo(1:20), 3, sum, partial=TRUE)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57