这两行代码之间有什么区别:
mv_avg[i-2] <- (sum(file1$rtn[i-2]:file1$rtn[i+2])/5)
和
mv_avg[i-2] <- mean(file1$rtn[i-2]:file1$rtn[i+2])
我试图计算数据集中前5个元素的移动平均值。我正在运行一个for循环,这两行给出了不同的输出。很抱歉没有提供数据和其他代码供您执行和查看(不能这样做,有些问题)。
我只想知道他们是否做同样的事情,或者他们两者之间是否存在细微差别。
答案 0 :(得分:4)
mean
或sum
不是问题。下面的示例说明了您的代码发生了什么:
x = seq(0.5,5,0.5)
i = 8
# Your code
x[i-2]:x[i+2]
[1] 3 4 5
# Index this way to get the five values for the moving average
x[(i-2):(i+2)]
[1] 3.0 3.5 4.0 4.5 5.0
x[i-2]
= 3且x[i+2]
= 5,因此x[i-2]:x[i+2]
相当于3:5
。您mean
和sum
会看到不同的结果,因为您的代码未返回5个值。因此将总和除以5并不能给出平均值。在我的示例中,sum(c(3,4,5))/5 != mean(c(3,4,5))
。
@ G.Grothendieck提到rollmean
。这是一个例子:
library(zoo)
rollmean(x, k=5, align="center")
[1] 2.1 3.1 4.1 5.1 6.1 7.1 8.1