我想计算类似于滚动平均值或移动平均值的东西,但不通过滑动窗口进行计算。例如,对于以下一组数字,我希望在 5 组下方显示平均值:
1,2,3,4,5,1,2,4,5,6,7,8,1,2,3,1,1,3,2,1
| 3 | 3.6 | 4.2 | 1.6 | //mean of every 5 numbers
我知道 TTR 库中可用的
movingAverages
和 rollmean
函数都使用滑动窗口,因此执行以下操作相当简单:d <- c(1,2,3,4,5,1,2,4,5,6,7,8,1,2,3,1,1,3,2,1)
m <- rollmean(d,5)
m[seq(1,length(m),5)]
> [1] 3.0 3.6 4.2 1.6
但是我有一个很大的数据集,必须有一种更有效的方法来计算这个……有什么想法吗?我假设有一个函数可以做到这一点,但我想不出这种类型的平均值被称为什么。
最佳答案
如果我理解正确,你可以这样做:
x <- c(1,2,3,4,5,1,2,4,5,6,7,8,1,2,3,1,1,3,2,1)
colMeans(matrix(x, nrow=5))
3.0 3.6 4.2 1.6
这是做什么的:
由于这是对向量的单个操作(矩阵本身就是一个向量),所以这应该非常快。例如,对于包含 1000 万个元素的向量:
x <- runif(1e7)
system.time(colMeans(matrix(x, nrow=5)))
user system elapsed
0.05 0.02 0.07
关于r - R中的连续独立手段(不使用滑动窗口),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14361858/