如何获得双面“移动平均值”,该函数是对向量左右两侧的n个数字求平均值并根据它们与中心值的距离赋予权重的函数?
我尝试使用TTR,但其移动平均值仅从左到右起作用,并将最左边的值设置为NA。所以我不能使用平滑的向量作为smooth.spline的输入
最佳答案
在Zoo包中,rollmean
和rollapply
具有允许大量变化的参数。
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=1
和rule=2
在rollapply
和approx
中(从R的核心开始)具有相同的含义,以实现更好的一致性和易用性。在开发版本中,当前示例中以下示例中围绕mean
的括号是防止它调用尚未实现rollmean
的rule="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/