r - 带有面板数据的 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)
我可能做错了什么。任何帮助表示赞赏。
解决方案
该问题没有具体定义要使用哪些分组列,因此可能必须根据您的需要稍微修改,但这没有任何包:
df$cumsum <- NULL # remove the result from df shown in question
transform(df, cumsum = ave(sum, delivery_year, delivery_month, FUN = cumsum))
请注意,尽管上述方法有效,但由于与同名函数混淆,您可能会在使用sum
and作为列名时遇到一些问题,因此您可能希望使用 Sum 和 Cumsum。cumsum
例如,如果您没有像我们上面所做的那样将 cumsum 清空,那么 FUN = cumsum 会认为您想要应用不是函数的 cumsum 列。
推荐阅读
- visual-studio-code - VSCode 中工作区的自定义语法
- omnet++ - 如何将参数添加到数据包并检索它们?
- php - Laravel 将所有父类别显示为特定子类别的树
- javascript - 分组和验证字段
- python - 是否可以在 Jupyter 笔记本中使用 ipyleaflet 调用 Leaflet API 函数?
- python - Python Eror 函数中不支持的操作数类型
- html - Django 模板中的验证
- elasticsearch - Apache Camel 在 Elasticsearch 连接器中指定 _id
- php - Yii2 Yii::$app->request->userIP 在 ELB 下没有给出正确的 IP 地址
- php - 在没有引导程序的情况下调用弹出模态框的锚标记不起作用?