Cumsum w /面板数据:不同的开始日期

问题描述 投票:0回答:2

试图找到不同类型合同的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)

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

r cumsum
2个回答
2
投票

问题没有明确定义要使用哪些分组列,因此可能需要根据您的需要稍微修改,但这样做没有任何包:

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

请注意,虽然上面的工作可能会因为与同名函数混淆而使用sumcumsum作为列名而遇到一些问题,所以你可能想要使用Sum和Cumsum。例如,如果你没有像我们上面那样使cumsum无效,那么FUN = cumsum会认为你想要应用不是函数的cumsum列。


0
投票

使用安排和变异

# 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
© www.soinside.com 2019 - 2024. All rights reserved.