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?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top