【发布时间】:2015-03-24 19:27:20
【问题描述】:
我有一个向量,对于该向量中的每个点,我想计算该点之前某个点范围的平均值减去该点之后某个点范围的平均值之间的差。我已经使用 for 循环完成了此操作,因为 filter 似乎没有选项专门应用于矢量点之后的点(参数边 = 仅 1 或 2),并且因为我不知道如何将其硬塞到 @ 987654323@ 语句,因为我需要一个函数,该函数使用它在向量中的位置而不只是它自己的值对每个点进行操作。谁能给我指路?
这是我使用 for 循环的方法:
x = rep(c(1,1,1,1,1,10), 20)
x = x + 100
x = x - c(1:length(x))
lookahead = 4
y = x
for(i in (lookahead):(length(x)-lookahead))
{
y[i] = mean(x[(i-lookahead):i]) - mean(x[i:(i+lookahead)])
}
plot(x)
lines(y, col="red")
您可以从图中看到目标是什么:识别尖峰(但不,我不想被告知其他查找尖峰的方法,我想使用我的简单 boxcar 移动平均法)。
必须有更好的方法来计算这个向量。感谢您的任何建议。
附言我看到有人想将此标记为 Calculating moving average in R 的重复,但是我的问题有所不同,因为该问题的答案(使用 roll_mean 或过滤器)在未经修改的情况下不适用于此处。如果有使用 roll_mean 或 filter 的方法,我无法从文档中得知,如果有人告诉我如何使用其中任何一个来计算前瞻性移动平均线而不是向后移动平均线,我将不胜感激。再次感谢。
【问题讨论】:
-
你能用你的代码添加一个例子吗
-
还有一些数据...
?datasets中的大量时间序列 -
@Gregor 我刚刚生成了一些非常简单的数据/代码来使用。
-
@rawr 完整示例可以从我粘贴到原始帖子中的行中运行。感谢您的任何建议。
-
我不认为你得到了 4 个值的平均值:
i:i+lookahead是一个值。我认为您需要使用i:(i+lookahead)也需要使用(i-lookahead):i(:运算符优先于+和-。)
标签: r vectorization apply