按组对上一行的值求和

时间:2018-12-02 18:47:38

标签: r dplyr grouping

我有一个包含一百万行和多列的数据框。

我需要在前三列(月,产品,费率)上进行分组,然后在新的第四列上进行归纳总结:在当前行中添加一个值,在前一行中添加一个值月(可以是前一个月,但由于需要进行多个分组,因此我无法确认。

我已经尝试过:

Bdtest<- BDdata %>%
      group_by(Month, PROD, Currency) %>%
      arrange(Month) %>%
      summarise(Value = Amount, lag(Amount2, default = 0))

但是我仍然没有得到想要的结果。

最后,我想要这样的结果:

 Month    Prod    Currency   Value   
  1        Fix       USD       value = amount of this period + amount from previous period
  1        Var        USD       x2

也许一个好的解决方案是用两个单独的表进行联接,这样我就可以联接求和,但是我可以在同一动作中进行分组依据吗?

编辑:

glimpse(bd5)
Observations: 1,843,645
Variables: 65

  $ Rate                 <chr> "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", ...
  $ Currency                    <chr> "998", "998", "998", "998", "998", "998", "998", "998", "998", "998", ...
  $ Flow_Type                <chr> "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", ...
  $ BANDA_TEMP                <chr> "01", "02", "02", "03", "03", "03", "04", "04", "05", "05", "05", "01"...
  $ PeriodoLow                <fct> 1M, 1M, 2M, 3M, 3M, 3M, 6M, 6M, 9M, 9M, 9M, 1M, 1M, 2M, 3M, 3M, 3M, 6M...
  $ PeriodoHigh               <fct> 2M, 2M, 3M, 6M, 6M, 6M, 9M, 9M, 1Y, 1Y, 1Y, 2M, 2M, 3M, 6M, 6M, 6M, 9M...
  $ DaysProp_CapHigh        <dbl> 329751.000, 5514.083, 0.000, 229447.533, 115113.678, 3725.489, 224284....
  $ DaysProp_CapLow        <dbl> 0.000, 325330.917, 331938.000, 103621.467, 219087.322, 331568.511, 112...

按照您的要求,我在这里放置了有关问题的更多数据。因此,我有一个巨大的Df,需要在其中按前四个变量+句点创建最终分组。

然后最终求和以获得Cap,该Cap将是:上个月(或年份)的“ DaysProp_CapLow” +“ DaysProp_CapHigh”的当前值。

第一个月就是:DaysProp_CapLow

但是从第二个月开始将是:DaysProp_CapLow + DaysProp_CapHigh(从第一个月开始)

我一直在尝试滞后,但在将其与分组依据和总结相结合时遇到了问题

任何帮助将不胜感激。我正在尝试这样做,现在加入表。

1 个答案:

答案 0 :(得分:2)

我不能确定,但​​是根据您的描述,我认为这应该可行:

Bdtest <- BDdata %>%
  group_by(Month, PROD, Currency) %>%
  arrange(Month) %>%
  mutate(Value = Amount + lag(Amount2, default = 0))