Скользящая сумма за 3 месяца - PullRequest
0 голосов
/ 30 января 2020

У меня есть 3 столбца ID, Дата, Флаг. Я хочу прокатить 3 месяца суммы флага каждого удостоверения личности. Например, сумма Flag of ID = 1 для отчетного месяца 29.02.2012 равна 2, так как это сумма Flag = 1 для ID = 1, где Date <= 2/29/2012. Другими словами, это совокупная сумма последних 3 значений. </p>

dt <- read.table(header = TRUE, 
                 text = '
ID  Date    Flag
1   1/30/2012   1
1   2/29/2012   1
1   3/30/2012   1
1   4/30/2012   1
1   5/30/2012   1
1   6/30/2012   1
1   7/30/2012   0
1   8/30/2012   0
1   9/30/2012   0
1   10/30/2012  0
1   11/30/2012  0
1   12/30/2012  0
2   1/30/2014   1
2   2/28/2014   1
2   3/30/2014   1
2   4/30/2014   1
2   5/30/2014   1
2   6/30/2014   1
2   7/30/2014   0
2   8/30/2014   0
2   9/30/2014   0
2   10/30/2014  0
2   11/30/2014  0
2   12/30/2014  0
')

1 Ответ

1 голос
/ 30 января 2020

Используйте rollapplyr с partial = TRUE для включения частичных сумм в начале каждого ID.

library(dplyr)
library(zoo)

dt %>% 
  group_by(ID) %>%
  mutate(roll = rollapplyr(Flag, 3, sum, partial = TRUE)) %>%
  ungroup
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...