利用大数据优化 cumsum

Luc*_*cas 2 loops r cumsum

我正在尝试编写一个代码,从向量中获取每第 7 个累积和值,但使用循环结构运行速度非常慢,因为我的数据太大了。

这是我写的代码。结果是预期的,但正如我所说,它运行得很慢:

for (i in 1:50000) {
  B[i] <- cumsum(A[i:50000])[7]
}
Run Code Online (Sandbox Code Playgroud)

示例:A = 4 1 2 2 6 2 6 6 1 10 5 8 6 9 1

结果必须是:

B[1] = (4+1+2+2+6+2+6) = 23

B[2] = (1+2+2+6+2+6+6) = 25

所以...

谢谢。

Ony*_*mbu 6

基础R:

使用filter

c(na.omit(filter(A, rep(1,7)))) # use stats::filter if tidyverse is loaded
[1] 23 25 25 33 36 38 42 45 40
Run Code Online (Sandbox Code Playgroud)

使用convolve

n <- 7
l <- length(A)
p <- l - n + 1
convolve(A, rep(1:0,c(n, p - 1)))[1:p]
[1] 23 25 25 33 36 38 42 45 40
Run Code Online (Sandbox Code Playgroud)

使用embed

rowSums(embed(A, 7))
[1] 23 25 25 33 36 38 42 45 40
Run Code Online (Sandbox Code Playgroud)

使用sapply

i <- 1:7 - 1
sapply(1:p, \(x)sum(A[x+i]))
[1] 23 25 25 33 36 38 42 45 40
Run Code Online (Sandbox Code Playgroud)

其他套餐:

zoo::rollsum(A, 7)
[1] 23 25 25 33 36 38 42 45 40
Run Code Online (Sandbox Code Playgroud)

  • 对你的 R 基础知识印象深刻 +1。 (2认同)