如何在 R 中对多列求和?

How do I make a cumulative sum in R with multiple columns?

我有一个包含 8 个关键数据变量的大型时间序列数据集。我基本上是在寻找前一年的相同数据并创建累计总和。

我有一个有效的代码,但它非常慢,有没有更有效的方法

我当前的代码运行缓慢:

编辑: 我的代码不可重现。我对此感到抱歉。经过比现在更值得骄傲的努力。

源数据

Data <- data.frame(
  V1 = rep(1:50, 25*3*20),
  V2 = rep(1:25, each= 50, 3*20),
  V3 = rep(1:3, each=50*25, 20),
  Year = rep(1:20, each=50*25*3),
  YearTotal = rnorm(75000), 
  CumulativeSum = 0)

工作但代码非常慢

for (i in 1:75000){
  Data$CumulativeSum[i] <- Data$YearTotal[i] +
    ifelse(Data$Year[i] == 1, 0, 
           Data$CumulativeSum[ 
           Data$V1 == Data$V1[i] &
               Data$V2 == Data$V2[i] &
               Data$V3 == Data$V3[i] &
               Data$Year + 1 == Data$Year[i] ])  
}

我的实际代码比较长,而且有字符和周期变量,我花了 30 多分钟来计算。我在 Whosebug 上找不到任何类似的问题——也许我不知道要搜索什么。我不禁相信一定有更优雅、更快速的方法来完成它。

您可以使用 dplyr 来加速您的代码:

library(dplyr)

Data <- Data %>% 
  group_by(V1, V2, V3) %>% 
  arrange(Year) %>% 
  mutate(CumulativeSum = cumsum(YearTotal))

通过按 V1、V2 和 V3 分组,我们确保只使用相同的组合。然后我们按年份排列并取累计和。

data.table:

library(data.table)

setDT(Data)
Data[order(Year), CumulativeSum := cumsum(YearTotal), by = .(V1, V2, V3)]