如何在R中为每个3个矢量值制作一个cumsum

时间:2017-10-09 20:56:19

标签: r matlab sum cumsum

我试图对任何向量进行累积求和并得到每3个值的累加,例如:

a: 1
   2
   3
   4
   5
   6
   7
   8
   9
   10 

b =每3个值的累计值总和

b =  3
     6
     9
    12
    15
    18
    21
    24
    27
    19

在Matlab中,可以使用b=movsum(a,3)轻松解决。在R中最简单的方法是什么?

3 个答案:

答案 0 :(得分:2)

a = 1:10
sapply(seq_along(a), function(i) sum(a[max(1, i-1):min(length(a), i+1)]))
# [1]  3  6  9 12 15 18 21 24 27 19

你可以写自己的功能

movsum = function(x, n){
    before = floor(n - n/2)
    after = n - before - 1
    sapply(seq_along(x), function(i)
        sum(x[max(1, i-before):min(length(a), i+after)]))
}
movsum(1:10, 3)
# [1]  3  6  9 12 15 18 21 24 27 19

请注意,如果n为偶数,则该函数将在右侧使用更少的元素

答案 1 :(得分:1)

zoo包有一个rollapply函数,允许您迭代任意宽度的移动窗口,这意味着你可以做到

zoo::rollapply(1:10, 3, sum, partial = TRUE)
#> [1]  3  6  9 12 15 18 21 24 27 19

答案 2 :(得分:1)

rollsum非常有用。

zoo::rollsum(x, 3)
[1]  6  9 12 15 18 21 24 27