window 大小的移动平均线
Moving average with varying window size
我正在使用 zoo::rollmean
计算移动平均线。然而,每个值被平均的 windows 是一个恒定大小 k
(我想在 rollmean
实现中出于性能原因)。
是否有接受动态 window 的移动平均线的 R 实现?
toSmoothed = c(1,2,3,2,1,2,3,2)
dynamicRange = c(1,2,1,2,1,2,1,2)
foo(toSmoothed, dynamicRange, fill = NA, align = "left") # please notice the aligned left
# return
# c(1,2.5,3,1.5,1,2.5,3,NA)
不确定包裹中是否有任何东西,但您可以这样做...
foo <- function(toSmoothed, dynamicRange){
x <- c(0, cumsum(toSmoothed))
lower <- 1:length(toSmoothed)
upper <- lower+dynamicRange
x <- (x[upper]-x[lower])/(upper-lower)
return(x)
}
foo(toSmoothed, dynamicRange)
[1] 1.0 2.5 3.0 1.5 1.0 2.5 3.0 NA
zoo::rollapply
在这里很有用。尝试:
zoo::rollapply(toSmoothed, dynamicRange, FUN = mean, fill = NA, align = "left")
[1] 1.0 2.5 3.0 1.5 1.0 2.5 3.0 NA
我正在使用 zoo::rollmean
计算移动平均线。然而,每个值被平均的 windows 是一个恒定大小 k
(我想在 rollmean
实现中出于性能原因)。
是否有接受动态 window 的移动平均线的 R 实现?
toSmoothed = c(1,2,3,2,1,2,3,2)
dynamicRange = c(1,2,1,2,1,2,1,2)
foo(toSmoothed, dynamicRange, fill = NA, align = "left") # please notice the aligned left
# return
# c(1,2.5,3,1.5,1,2.5,3,NA)
不确定包裹中是否有任何东西,但您可以这样做...
foo <- function(toSmoothed, dynamicRange){
x <- c(0, cumsum(toSmoothed))
lower <- 1:length(toSmoothed)
upper <- lower+dynamicRange
x <- (x[upper]-x[lower])/(upper-lower)
return(x)
}
foo(toSmoothed, dynamicRange)
[1] 1.0 2.5 3.0 1.5 1.0 2.5 3.0 NA
zoo::rollapply
在这里很有用。尝试:
zoo::rollapply(toSmoothed, dynamicRange, FUN = mean, fill = NA, align = "left")
[1] 1.0 2.5 3.0 1.5 1.0 2.5 3.0 NA