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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top