Рассчитать скользящую сумму отсчетов в R - PullRequest
0 голосов
/ 05 ноября 2019

Глядя, чтобы рассчитать скользящую сумму отсчетов в R. Я рассмотрел эту ветку SO:

R dplyr скользящая сумма

и другие.

library(tidyverse)
library(RcppRoll)

client <- c('a','a','b','b','c','c')
count <- c(1,2,3,5,6,4)
date <- c('2018-01-31','2018-02-28','2018-01-31','2018-02-28','2018-01- 
31','2018-02-28')

df <- data.frame(client, count, date)

rolling<- df %>%
arrange(client, date) %>%
group_by(client, date ) %>%
mutate(roll_sum = rollapplyr(count, 12, sum, partial=T))

Может кто-нибудь указать, что я делаю неправильно, чтобы я мог это исправить? В этом примере значение roll_sum равно только исходному количеству. Я хотел бы создать скользящую сумму групп.

Обновление для отображения выборки с данными за более чем 12 месяцев:

library(tidyverse)
library(RcppRoll)

client <- c('a')
count <- c(1,2,3,5,6,4,4,8,6,9,10,12,13)
date <- c('2018-01-31','2018-02-28','2018-03-31','2018-04-30','2018-05- 
31','2018-06-30', '2018-07-31','2018-08-31','2018-09-30','2018-10-31','2018- 
11-30','2018-12-31', '2019-01-31')

df <- data.frame(client, count, date)

rolling<- df %>%
arrange(client, date) %>%
group_by(client) %>%
mutate(roll_sum = rollapplyr(count, 12, sum, partial=T))

Обновление для отображения желаемого результата:

Client     Period         Count    12 Month Rolling Sum
a          2018-01-31        1     1
a          2018-02-28        2     3
a          2018-03-31        3     6
a          2018-04-30        4     10
a          2018-05-31        5     15
a          2018-06-30        6     21 
a          2018-07-31        7     28
a          2018-08-31        8     36
a          2018-09-30        9     45
a          2018-10-31        10    55
a          2018-11-30        11    66
a          2018-12-31        12    78
a          2019-01-31         5    82

Обратите внимание, что в строке 2019-01-31 начинается новый 12-месячный период. Каждый месяц после того, как следует также Спасибо заранее

1 Ответ

1 голос
/ 05 ноября 2019

Для функции rollapplyr в последней строке вы можете попробовать zoo::rollapplyr:

df %>%
  arrange(client, date) %>%
  group_by(client) %>%
  mutate(roll_sum = zoo::rollapplyr(count, 12, sum, partial=TRUE))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...