Rollapply con ventana "en crecimiento"
Pregunta
Chicos, normalmente cuando hacen algo como:
tmp = zoo(rnorm(100), 1:100)
rollapply(tmp, 10, function(x) quantile(x, 0.05), align="right")
Con razón rollapply
Comenzará a calcular el valor del momento en que hay 10 elementos disponibles.
Desafortunadamente, necesito algo que use tantos datos como sea posible para las observaciones de FIST 10, esencialmente una ventana de datos en crecimiento hasta que haya suficientes datos para usar una ventana deslizante, por ejemplo, 1, 1: 2, 1: 3, 1: 4, etc. . Hasta que tengamos al menos 10 elementos y luego deslice la ventana como de costumbre.
¿Hay una mejor manera de hacer esto que un feo para el bucle?
Solución
¿Por qué no rellenar la serie con 9 Nas al principio? Definitivamente mejor que "feo para bucles":
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)
Otros consejos
rollapply
en zoológico puede hacer eso especificando partial=TRUE
, p.ej
> 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