2015-07-22 7 views
0

J'ai un obj zoo comme cela colled z.rollapply signifie 5 années précédentes

> z["2013-12",1] 
     Allerona 

2013-12-01 0.0 2013-12-02 0.0 2013-12-03 0.0 2013-12-04 0.0 2013-12-05 0.2 2013-12-06 0.0 2013-12-07 0.0 2013-12-08 0.2 2013-12-09 0.0 ....

Il stocke la valeur quotidienne des précipitations.

Je suis en mesure de calculer l'accumulation de 5 jours à l'aide rollapply usingi:

m=rollapply(z, width=3, FUN=sum, by=1, by.column=TRUE, fill=NA, align="right") 

Il semble ok

> m["2013-12",1] Allerona 2013-12-01 0.0 2013-12-02 0.0 2013-12-03 0.0 2013-12-04 0.0 2013-12-05 0.2 2013-12-06 0.2 2013-12-07 0.2 2013-12-08 0.2 2013-12-09 0.2 ...

Comment puis-je calculer pour chaque themean jour pendant 5 ans avant?

Merci

Répondre

0
SMA (x, n=5*365) 

ne pas faire l'affaire?

+1

Je ne connais pas une telle fonction. En R base n'est pas présent. Où je peux le trouver? Merci –

+0

C'est dans le paquet TTR. J'ai supposé que si vous utilisiez zoo, vous utilisiez probablement aussi XTS et TTR. Quoi qu'il en soit, vous pouvez installer xts et obtenir des charges de fonctions Time Series –

+0

j'ai essayé. J'obtiens: '> SMA (m, n = 5 * 365) Erreur dans runSum (x, n): pas assez de valeurs non NA' –

0

J'ai trié mon problème. La solution consistait à utiliser une liste dans le paramètre width de rollapply. ci-dessous le code:

mean5year=rollapply(as.zoo(m), list(-365*5:1), function(x) {mean(x,na.rm = TRUE)},fill=NA)

list(-365*5:1)

prend le même jour mais dans les 5 années précédentes. Je devrais également utiliser une moyenne avec na.rm = TRUE pour calculer moyenne aussi si NA sont dans la séquence