Как составить сумму каждые 3 значения вектора в 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?
3 ответа
Решение
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
Равномерно, функция будет занимать меньше элементов справа
zoo
пакет имеет rollapply
функция, которая позволяет перебирать движущееся окно произвольной ширины, а это значит, что вы можете сделать
zoo::rollapply(1:10, 3, sum, partial = TRUE)
#> [1] 3 6 9 12 15 18 21 24 27 19
rollsum
может быть полезным
zoo::rollsum(x, 3)
[1] 6 9 12 15 18 21 24 27