我正在尝试编写一个代码,从向量中获取每第 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
所以...
谢谢。
基础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)
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |