我在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.
我倾向于避免在有可用的东西时编写复杂的函数。
谢谢!
答案 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