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

use*_*875 1 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
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

结果中应该只有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
Run Code Online (Sandbox Code Playgroud)

akr*_*run 7

我们可以使用roll_meanlibrary(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
Run Code Online (Sandbox Code Playgroud)

或者,如果我们使用的是rollapplylibrary(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
Run Code Online (Sandbox Code Playgroud)

更新

如果我们想要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
Run Code Online (Sandbox Code Playgroud)

或使用 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
Run Code Online (Sandbox Code Playgroud)