Using rollmean when there are missing values (NA)
Use 'partial=TRUE' option. The option makes it possible to calculate data with NA.
> rollapply(z, width=3, FUN=function(x) mean(x, na.rm=TRUE), by=1, by.column=TRUE, partial=TRUE, fill=NA, align="right")
a b c
1 0.0 NaN 1.000000
2 0.5 10.0 5.500000
3 1.0 9.5 4.333333
4 2.0 9.0 6.666667
5 3.0 8.0 4.666667
6 4.0 7.0 6.000000
7 5.0 6.0 7.000000
8 6.0 5.0 8.666667
9 7.0 4.0 8.333333
10 8.0 3.0 7.000000
11 9.0 2.0 5.000000
If you want to change 'NaN' in the first row to '0', modify 'fill=NA' to 'fill=0'.
From ?rollmean
The default method of ‘rollmean’ does not handle inputs that contain ‘NA’s. In such cases, use ‘rollapply’ instead.