我想计算一些类似于滚动平均值或移动平均值的东西但是没有通过滑动窗口这样做.例如,对于下面的一组数字,我希望下面显示的平均数为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
Run Code Online (Sandbox Code Playgroud)
我知道movingAveragesTTR lib 中的可用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
Run Code Online (Sandbox Code Playgroud)
但我有一个大型数据集,必须有一个更有效的方法来计算这个...任何想法?我假设有一个函数可以做到这一点,但我不能想到这种类型的平均值被调用.
And*_*rie 10
如果我理解正确,你可以这样做:
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
Run Code Online (Sandbox Code Playgroud)
这是做什么的:
由于这是对矢量的单个操作(矩阵本身就是一个矢量),因此应该非常快.例如,对于1000万个元素的向量:
x <- runif(1e7)
system.time(colMeans(matrix(x, nrow=5)))
user system elapsed
0.05 0.02 0.07
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
395 次 |
| 最近记录: |