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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top