сумма значений из предыдущего ряда по группам - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть фрейм данных с более чем 1 миллионом строк и несколькими столбцами.

Мне нужно выполнить группировку по первым трем столбцам (Month, Prod, Rate), а затем по четвертому новому столбцу Iнужно суммировать следующую операцию: добавить значение в текущей строке + добавить значение в предыдущем месяце (который может быть предыдущим, но я не могу подтвердить это из-за того, что мне нужно сделать несколько групп.

Я пробовал с этим:

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что будет: текущее значение «DaysProp_CapLow» + «DaysProp_CapHigh» от предыдущего месяца (или года).

В первый месяц будет просто: DaysProp_CapLow

Но со второго месяца будет:DaysProp_CapLow + DaysProp_CapHigh (с первого месяца)

Я пытался с лагом, но у меня проблемы с его объединением с группировкой и суммированием

Любая помощь будет оценена.Я пытаюсь сделать это сейчас присоединяясь к таблицам.

1 Ответ

0 голосов
/ 03 декабря 2018

Без предоплаты я не могу быть уверен, но на основании вашего описания я считаю, что это должно работать:

Bdtest <- BDdata %>%
  group_by(Month, PROD, Currency) %>%
  arrange(Month) %>%
  mutate(Value = Amount + lag(Amount2, default = 0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...