试图找到不同类型合同的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
和cumsum
作为列名而遇到一些问题,所以你可能想要使用Sum和Cumsum。例如,如果你没有像我们上面那样使cumsum无效,那么FUN = cumsum会认为你想要应用不是函数的cumsum列。
使用安排和变异
# Import library
library(dplyr)
# Calculating cumsum
df %>%
group_by(delivery_year, delivery_month) %>%
arrange(sum) %>%
mutate(cs = cumsum(sum))
产量
report_year report_month delivery_year delivery_month sum cumsum cs
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2017 1 2017 5 100 100 100
2 2017 2 2017 6 100 100 100
3 2018 3 2018 7 100 100 100
4 2018 2 2018 6 100 100 100
5 2017 2 2017 5 200 300 300
6 2017 3 2017 6 200 300 300
7 2018 4 2018 7 200 300 300