dplyr: рассчитать остаток на счете в день - PullRequest
1 голос
/ 03 апреля 2020

Мне нужно построить прогноз баланса счета, но я борюсь с расчетом ежедневного баланса с использованием dplyr. Не работает этот подход, использующий dplyr :: lag, поскольку lag не видит измененное значение:

my_balance <- 100
df <- data.frame(day = 1:10, cost = c(-20,-30,-10,-30,-40,-20,-30,-35,-10,-12), revenue = c(100,20,0,12,7,100,20,30,15,12))
df %>%
  mutate(balance = lag(balance, default = my_balance) + cost + revenue)

Результат:

   day cost revenue balance
1    1  -20     100     180
2    2  -30      20      90
3    3  -10       0      90
4    4  -30      12      82
5    5  -40       7      67
6    6  -20     100     180
7    7  -30      20      90
8    8  -35      30      95
9    9  -10      15     105
10  10  -12      12     100

Ожидаемый результат:

   day cost revenue balance
1    1  -20     100     180
2    2  -30      20     170
3    3  -10       0     160
4    4  -30      12     142
5    5  -40       7     109
6    6  -20     100     189
7    7  -30      20     179
8    8  -35      30     174
9    9  -10      15     179
10  10  -12      12     179

Что я могу использовать для создания баланса на строку, используя предыдущую вычисленную сумму?

1 Ответ

1 голос
/ 03 апреля 2020

Вы можете использовать cumsum() из cost + revenue, добавленных к my_balance:

library(dplyr)

df %>%
  mutate(balance = my_balance + cumsum(cost + revenue))
#>    day cost revenue balance
#> 1    1  -20     100     180
#> 2    2  -30      20     170
#> 3    3  -10       0     160
#> 4    4  -30      12     142
#> 5    5  -40       7     109
#> 6    6  -20     100     189
#> 7    7  -30      20     179
#> 8    8  -35      30     174
#> 9    9  -10      15     179
#> 10  10  -12      12     179

Создано в 2020-04-03 пакетом Представить ( v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...