滚动适用于返回移动平均线

时间:2015-09-16 16:59:59

标签: r

下面有一个数据向量,我想计算一个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

1 个答案:

答案 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