我想计算类似于滚动平均值或移动平均值的东西,但不通过滑动窗口进行计算。例如,对于以下一组数字,我希望在 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 库中可用的 movingAveragesrollmean 函数都使用滑动窗口,因此执行以下操作相当简单:
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/

    10-12 23:29