首页 > 解决方案 > 带有面板数据的 Cumsum:不同的开始日期

问题描述

试图在不同类型的合同中找到 cumsum。每个都有一个唯一的停止(即交货)日期,在该日期之前有几个月的预期交货时间。需要计算实际交货日期之前所有预期交货的累计。

由于某种原因,cumsum/rollsum 函数不起作用。我尝试过 DT 和 dplyr 版本,但都失败了。

这是我正在处理的问题的简化数据。

df <- data.frame(report_year = c(rep(2017,10), rep(2018,10)), 
       report_month = c(seq(1,5,1), seq(2,6,1), seq(3,7,1), seq(2,6,1)),
       delivery_year = c(rep(2017,10), rep(2018,10)), 
       delivery_month = c(rep(5,5),rep(6,5), rep(7,5), rep(6,5)),
       sum = c(rep(seq(100,500,100), 4)),
       cumsum = c(rep(c(100,300,600,1000,1500),4)))

前 5 列是我目前拥有的。

我正在尝试获取最后一列(即 cumsum)

我可能做错了什么。任何帮助表示赞赏。

标签: rcumsum

解决方案


该问题没有具体定义要使用哪些分组列,因此可能必须根据您的需要稍微修改,但这没有任何包:

df$cumsum <- NULL  # remove the result from df shown in question
transform(df, cumsum = ave(sum, delivery_year, delivery_month, FUN = cumsum))

请注意,尽管上述方法有效,但由于与同名函数混淆,您可能会在使用sumand作为列名时遇到一些问题,因此您可能希望使用 Sum 和 Cumsum。cumsum例如,如果您没有像我们上面所做的那样将 cumsum 清空,那么 FUN = cumsum 会认为您想要应用不是函数的 cumsum 列。


推荐阅读