如何在R中为向量的每3个值制作一个cumsum
How to make a cumsum each 3 values of a vector in R
我试图对任何向量进行累加求和,并获得每 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 中最简单的方法是什么?
zoo
包有一个 rollapply
函数,允许您迭代任意宽度的移动 window,这意味着您可以
zoo::rollapply(1:10, 3, sum, partial = TRUE)
#> [1] 3 6 9 12 15 18 21 24 27 19
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
是偶数,函数将在右侧使用较少的元素
rollsum
很有用。
zoo::rollsum(x, 3)
[1] 6 9 12 15 18 21 24 27
我试图对任何向量进行累加求和,并获得每 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 中最简单的方法是什么?
zoo
包有一个 rollapply
函数,允许您迭代任意宽度的移动 window,这意味着您可以
zoo::rollapply(1:10, 3, sum, partial = TRUE)
#> [1] 3 6 9 12 15 18 21 24 27 19
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
是偶数,函数将在右侧使用较少的元素
rollsum
很有用。
zoo::rollsum(x, 3)
[1] 6 9 12 15 18 21 24 27