【问题标题】:Roll apply to return moving average滚动适用于返回移动平均线
【发布时间】:2015-09-16 16:59:59
【问题描述】:

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

我想使用滚动应用,但我没有得到正确的结果:

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

【问题讨论】:

  • sum 除以 2,因为你想要一个平均值

标签: r


【解决方案1】:

我们可以从library(RcppRoll)使用roll_mean

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

或者,如果我们使用来自library(zoo)rollapply,请使用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

【讨论】:

  • 请参阅编辑应该有一个 NA 作为第一个元素。任何想法。
  • @user3022875 更新了帖子。希望不会有更多的修改。
  • 有没有办法让滚动平均值包括 NA。您是否看到第二个元素是 1,但实际上应该是 0.5,因为 NA 和 1 = 2 的 2 周期平均值。这可能吗?
  • @user3022875 我不确定最后一个 NA 的预期输出。也许rollapply(replace(z, is.na(z), 0), 2, mean, na.rm=TRUE, fill=NA, align='right')
猜你喜欢
  • 2013-12-22
  • 2019-01-20
  • 2021-07-11
  • 2017-09-01
  • 2012-06-14
  • 2021-07-10
  • 2016-04-09
  • 1970-01-01
  • 2015-01-18
相关资源
最近更新 更多