如何获得双面“移动平均值”,该函数是对向量左右两侧的n个数字求平均值并根据它们与中心值的距离赋予权重的函数?

我尝试使用TTR,但其移动平均值仅从左到右起作用,并将最左边的值设置为NA。所以我不能使用平滑的向量作为smooth.spline的输入

最佳答案

在Zoo包中,rollmeanrollapply具有允许大量变化的参数。

library(zoo)
x <- seq(10)^2

# no NAs at end
rollmean(x, 3)

# NAs at ends
rollmean(x, 3, na.pad = TRUE)

# weighted mean
rollapply(zoo(x), 3, function(x) c(1, 2, 1) %*% x / 4)

# at ends take means of less than 3 points - needs devel version
# partial= is in development and at this point must use na.rm = TRUE to use partial
source("http://r-forge.r-project.org/scm/viewvc.php/*checkout*/pkg/zoo/R/rollapply.R?revision=802&root=zoo")
rollapply(zoo(x), 3, mean, partial = TRUE, na.rm = TRUE)

编辑:

请注意,自从编写此代码以来,对Zoo的开发版本进行了更改,因此无需编写partial = TRUE,而是编写rule =“partial”或rule = 3。问题在于,随着新的最终规则被添加到开发版本中(现在有3条规则,并且在发布之前将添加第4条规则),每个规则都有单独的参数,会使用户界面困惑。此外,rule与R核心中的approx更加一致。实际上,rule=1rule=2rollapplyapprox中(从R的核心开始)具有相同的含义,以实现更好的一致性和易用性。在开发版本中,当前示例中以下示例中围绕mean的括号是防止它调用尚未实现rollmeanrule="partial"的必要条件,但是在正式发布时,将不再需要这样做。
source("http://r-forge.r-project.org/scm/viewvc.php/*checkout*/pkg/zoo/R/rollapply.R?revision=815&root=zoo")
rollapply(zoo(x), 3, (mean), rule = "partial")

关于r - 双面移动平均线?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4418643/

10-12 22:38