Using rollmean when there are missing values (NA)
r, xts, zoo
Solution
From `?rollmean`
The default method of ‘rollmean’ does not handle inputs that contain ‘NA’s. In such cases, use ‘rollapply’ instead.
Problem
I have a data set which has a couple of `NA` in it. I take a rolling mean and expect that when there is no `NA` in the window, the rolling mean should produce a number as opposed to `NA`, however, `rollmeanr` in `zoo` does not seem to do this. Example: ``` require(zoo) z = zoo(cbind(a=0:10, b=c(NA,10:1), c=sample(1:11,11)), 1:11) rollmeanr(z, k=3, fill=NA) a b c 1 NA NA NA 2 NA NA NA 3 1 NA 3.333333 4 2 NA 4.666667 5 3 NA 4.000000 6 4 NA 6.333333 7 5 NA 7.000000 8 6 NA 9.333333 9 7 NA 8.333333 10 8 NA 8.666667 11 9 NA 5.666667 rollapply(z, width=3, FUN=mean, by=1, by.column=TRUE, fill=NA, align="right") a b c 1 NA NA NA 2 NA NA NA 3 1 NA 3.333333 4 2 9 4.666667 5 3 8 4.000000 6 4 7 6.333333 7 5 6 7.000000 8 6 5 9.333333 9 7 4 8.333333 10 8 3 8.666667 11 9 2 5.666667 ``` I would expect these two calls to generate the same result. Please comment. Some session info: ``` sessionInfo() R version 3.0.1 (2013-05-16) Platform: x86_64-unknown-linux-gnu (64-bit) locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 [7] LC_PAPER=C LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] zoo_1.7-10 loaded via a namespace (and not attached): [1] grid_3.0.1 lattice_0.20-15 ```