下面有一个数据向量,我想计算一个2周期移动平均值,因为数据中有NA。所以我要找的结果是:
Data 2 period moving average
NA
1 1
2 1.5
3 2.5
4 3.5
5 4.5
6 5.5
7 6.5
8 7.5
9 8.5
10 9.5
NA 10
在r我想要使用roll apply但我没有得到正确的结果:
z <- c(NA,seq(1,10,1),NA)
z
rollapply(z, 2, mean, na.rm = TRUE, fill = list(NA, NULL, NA))
[1] 1.0 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 10.0 NA
结果中应该只有1个NA,它应该是第一个元素,因为你不能用1个元素做两个周期平均值,但上面的结果显示NA是最后一个元素
我的结果应该是:
NA
1
1.5
2.5
3.5
4.5
5.5
6.5
7.5
8.5
9.5
10
答案 0 :(得分:7)
我们可以使用roll_mean
library(RcppRoll)
library(RcppRoll)
roll_mean(z,2, na.rm=TRUE)
#[1] 1.0 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 10.0
如果我们使用rollapply
中的library(zoo)
,请使用mean
library(zoo)
rollapply(z, 2, mean, na.rm=TRUE)
#[1] 1.0 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 10.0
如果我们想将NA
作为第一个元素,我们可以使用fill
参数和align
。
roll_mean(z,2, na.rm=TRUE, fill=NA, align='right')
#[1] NA 1.0 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 10.0
或使用rollapply
rollapply(z, 2, mean, na.rm=TRUE, fill=NA, align='right')
#[1] NA 1.0 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5 10.0