2011-01-28 13 views
8

Ragazzi, normalmente quando si fa qualcosa di simile:rollapply con "crescente" finestra

tmp = zoo(rnorm(100), 1:100) 
rollapply(tmp, 10, function(x) quantile(x, 0.05), align="right") 

Giustamente rollapply inizierà il calcolo del valore dal momento in cui sono disponibili 10 elementi.

Purtroppo ho bisogno di qualcosa che usi il maggior numero di dati possibile per le prime 10 osservazioni, essenzialmente una finestra crescente di dati finché non ci sono dati sufficienti per usare una finestra scorrevole, ad es. 1, 1: 2, 1: 3, 1: 4, ecc., Fino a quando non abbiamo almeno 10 elementi e poi facciamo scorrere la finestra come al solito.

C'è un modo migliore per farlo rispetto a un brutto ciclo?

risposta

4

Perché non basta montare la serie con 9 NA all'inizio? Decisamente migliore di "brutto per loops":

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) 
10

rollapply nello zoo può farlo specificando partial=TRUE, ad es.

> 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 
+0

Sembra che la definizione della funzione 'rollapply' sia stata modificata. La funzione call dovrebbe ora apparire come - rollapply (1:20, 3, FUN = sum, align = "right", partial = TRUE) ' – steadyfish

+0

Grazie. Ho risolto. –

Problemi correlati