gpt4 book ai didi

r - 如何使用 R 中的 apply family 计算 5 天累计

转载 作者:行者123 更新时间:2023-12-05 08:43:13 25 4
gpt4 key购买 nike

我有一个矩阵数据框 6940 行和 100 列。我需要在数据集上一次找到 5 天的累计值。现在我能够为此构建一个 for 循环代码,如下所示:

cum<- matrix(data=q1,nrow=6940,ncol=100)
for (j in 1:100){
for (i in 1:6940){
cum[i,j]<-sum(q1[i,j],q1[i+1,j],q1[i+2,j],q1[i+3,j],q1[i+4,j],na.rm=T)
}
}

我想知道apply系列中是否有任何功能可以做同样的事情,因为这段代码非常耗时。

例如,如果我使用命令生成数据框

 ens <- matrix(rnorm(200),20)

我想要一次 5 行的累加和。即 row1:row5, row2:row6, row3:row7 等数据框形式的总和。

我尝试以这种形式使用应用函数:

apply(apply(apply(apply( apply(m, 2, cumsum),2, cumsum), 2, cumsum),2,cumsum),2,cumsum)

但问题是我没有获得以 5 为单位的累积,只有整体累积。

最佳答案

这是一种使用 stats::filter 函数计算滚动总和并使用 apply 循环遍历列的方法:

m <- matrix(1:48, ncol = 4)
# [,1] [,2] [,3] [,4]
# [1,] 1 13 25 37
# [2,] 2 14 26 38
# [3,] 3 15 27 39
# [4,] 4 16 28 40
# [5,] 5 17 29 41
# [6,] 6 18 30 42
# [7,] 7 19 31 43
# [8,] 8 20 32 44
# [9,] 9 21 33 45
#[10,] 10 22 34 46
#[11,] 11 23 35 47
#[12,] 12 24 36 48

apply(m, 2, filter, filter = rep(1, 5), sides = 1)
# [,1] [,2] [,3] [,4]
# [1,] NA NA NA NA
# [2,] NA NA NA NA
# [3,] NA NA NA NA
# [4,] NA NA NA NA
# [5,] 15 75 135 195
# [6,] 20 80 140 200
# [7,] 25 85 145 205
# [8,] 30 90 150 210
# [9,] 35 95 155 215
#[10,] 40 100 160 220
#[11,] 45 105 165 225
#[12,] 50 110 170 230

这可能需要根据您希望如何处理少于 5 个值的窗口(例如,在开头)进行调整。

关于r - 如何使用 R 中的 apply family 计算 5 天累计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33297353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com