R:是否存在滚动平均函数,每个窗口都有修剪值?

时间:2017-04-27 19:27:51

标签: r rcpp

我正在尝试移动平均线(类似于RcppRoll中的roll_mean),除了在每个窗口,我想修剪异常值(例如,第5至第95百分位数值。)

举个例子,给出一个滚动窗口

v <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

考虑到我想要10到90%的数值,我应该得到5.5的答案(1和10将被排除在外,并且对其余的值采取均值(2)到9)。

遗憾的是,我无法使用像RcppRoll::roll_mean这样的函数,因为修剪需要在每个滚动窗口完成。

我能够通过向zoo::rollapply提供自定义均值函数来实现这一点 - 但对于我的用例(&gt; 1e6行)来说,它的工作速度太慢了。

我查看了支持滚动功能的各种软件包(例如RcppRollzooTTRcaToolsroll等。它们似乎支持这种修剪功能。

我正在考虑使用Rcpp来构建自定义的快速滚动功能,但我对这个框架相对不熟悉。不确定是否有更好的解决方案。

这里将不胜感激。

2 个答案:

答案 0 :(得分:-1)

我想你可以做点像

rollapply(data, 10, function(x) mean(x[x>=quantile(x,0.1) & x<=quantile(x,0.9)]))

答案 1 :(得分:-1)

这是base-R中的一个函数,它比pymongo.errors.OperationFailure: 'pipeline' option must be specified as an array 快得多。它可能会进一步简化它,但原则似乎有效。它通过使用“滚动”来避免每个窗口的排序。排序的矢量zoo::rollapply,只需在窗口滚动时为旧元素和新元素更新它。

vec