rollapply avec fenêtre « de plus en plus »
Question
Les gars, normalement quand vous faites quelque chose comme:
tmp = zoo(rnorm(100), 1:100)
rollapply(tmp, 10, function(x) quantile(x, 0.05), align="right")
Tout à fait à juste titre rollapply
va commencer à calculer la valeur à partir du moment 10 éléments sont disponibles.
Malheureusement, je besoin de quelque chose que les utilisations autant de données que possible pour les observations de poing 10, essentiellement une fenêtre de plus en plus de données jusqu'à ce qu'il y a suffisamment de données pour utiliser une fenêtre glissante, par exemple 1, 1: 2, 1: 3, 1: 4., Etc. jusqu'à ce que nous avons au moins 10 éléments et puis faire glisser la fenêtre comme d'habitude
Y at-il une meilleure façon de le faire qu'une vilaine boucle?
La solution
Pourquoi ne pas simplement pad la série avec 9 NAs au début? Certainement mieux que « laid pour les boucles »:
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)
Autres conseils
rollapply
dans le zoo peut le faire en spécifiant partial=TRUE
, par exemple.
> 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