r 中数据框中每一列的最后 12 行的滚动总和
Rolling sum of last 12 rows for every column in a data frame in r
我有一个如下所示的数据框:Data frame
这些列每三个月才有一次数据。对于除第一列之外的所有列,我想要新数据框中最后 12 行的 运行 总和。我已经使用带有代码的 for 循环成功完成了此操作:
for (j in 2:3537){
for (i in 10:415){
EBIT_total[i,j]<-EBIT[i-9,j]+EBIT[i-6,j]+EBIT[i-3,j]+EBIT[i,j]
Sales_total[i,j]<-Sales[i-9,j]+Sales[i-6,j]+Sales[i-3,j]+Sales[i,j]
}}
但是,由于列数的原因,这会花费很多时间。
我在互联网上搜索了解决方案,并尝试使用 apply 和 rollapply(来自 "zoo" 库),但没有成功。
希望有人能够提供帮助,在此先感谢!
问候拉斯穆斯
试试这个:
library(zoo)
DF <- data.frame(a = 1:25, b = 1:25) # test data
rollapplyr(DF, 10, function(x) sum(x[c(1, 4, 7, 10)]), fill = NA)
# or even shorter
rollapplyr(DF, list(c(-9, -6, -3, 0)), sum, fill = NA)
我有一个如下所示的数据框:Data frame
这些列每三个月才有一次数据。对于除第一列之外的所有列,我想要新数据框中最后 12 行的 运行 总和。我已经使用带有代码的 for 循环成功完成了此操作:
for (j in 2:3537){
for (i in 10:415){
EBIT_total[i,j]<-EBIT[i-9,j]+EBIT[i-6,j]+EBIT[i-3,j]+EBIT[i,j]
Sales_total[i,j]<-Sales[i-9,j]+Sales[i-6,j]+Sales[i-3,j]+Sales[i,j]
}}
但是,由于列数的原因,这会花费很多时间。
我在互联网上搜索了解决方案,并尝试使用 apply 和 rollapply(来自 "zoo" 库),但没有成功。
希望有人能够提供帮助,在此先感谢!
问候拉斯穆斯
试试这个:
library(zoo)
DF <- data.frame(a = 1:25, b = 1:25) # test data
rollapplyr(DF, 10, function(x) sum(x[c(1, 4, 7, 10)]), fill = NA)
# or even shorter
rollapplyr(DF, list(c(-9, -6, -3, 0)), sum, fill = NA)