计算移动平均线,不包括R

时间:2016-04-13 15:58:54

标签: r function time-series moving-average

我在R中使用rollmean来计算移动平均线:

> x = c(3, 8, 12, 5, 9, 6, 8)
> rollmean(x, 7)
[1] 7.285714

Rollmean接受奇数输入并计算移动平均值,INCLUSIVE为中间值(在本例中为5)。但是我想知道是否有一个函数允许计算一个值周围的MA,排除它,以便评估围绕中间值的影响。使用此示例,平均值为3 + 8 + 12 + 9 + 6 + 8,不包括中间值5.

我倾向于避免在有可用的东西时编写复杂的函数。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用rollapply(允许您将自定义函数应用于滚动窗口)并编写一个简单函数来排除中间值。例如:

my_mean = function(x) {
  if(length(x) %% 2 == 0L) { return(mean(x)) }
  if(length(x) %% 2 == 1L) { return(mean(x[-ceiling(0.5*length(x))])) }
}

# Fake data
set.seed(5)
values = cumsum(rnorm(20))

library(zoo)

rollapply(values, width=5, FUN=my_mean)
[1]  0.032599697  0.341949790 -0.223156076 -0.054644590 -0.007797604 -0.313482549 -0.248932331 -0.372755845
[9] -0.880215212 -0.848262308 -1.049123185 -1.822352744 -2.315909292 -3.318552855 -4.107026776 -4.295736122
相关问题