如果目标是计算 3 个值的滚动总和,以便隐式添加 0 以确保输出具有 5 个元素,即使输入有 3,请尝试以下操作:
1) rollapply根据是否使用右对齐、居中对齐或左对齐以及是否使用,乘以x
和插入 0 。 是 的默认值并且是 的默认值。y
partial=
align="center"
rollapply
align = "right"
rollapplyr
library(zoo)
rollapply(c(0, x*y, 0), 3, sum, partial = TRUE)
## [1] 2 5 9 7 4
rollapplyr(c(x*y, 0, 0), 3, sum, partial = TRUE)
## [1] 2 5 9 7 4
rollapplyr(c(0, 0, x*y), 3, sum, align = "left", partial = TRUE)
## [1] 2 5 9 7 4
rollapply(c(0, 0, x*y, 0, 0), 3, sum)
## [1] 2 5 9 7 4
rollsum(c(0, 0, x*y, 0, 0), 3) # this solution has the lowest character count
## [1] 2 5 9 7 4
2) 基础 R可以使用以下方式编写基础解决方案embed
:
rowSums(embed(c(0, 0, x*y, 0, 0), 3))
## [1] 2 5 9 7 4
2a)或取累积和并减去累积和 3:
cumsum(c(x*y,0,0)) - cumsum(c(0, 0, 0, (x*y)[-3]))
## [1] 2 5 9 7 4
2b)如果想法是要进行循环计算,那么:
c(filter(c(0, x*y, 0), c(1,1,1), circular = TRUE))
## [1] 2 5 9 7 4