У меня есть таблица данных с событиями и под-событиями с течением времени, и я заинтересован в создании двух столбцов: (1) совокупная скользящая сумма того, произошло ли событие в течение 5 лет с даты события и (2) подсчет количества дополнительных событий (включая события), которые произошли в течение 5 лет с даты события. Ниже приведен пример кода:
dt = data.table(id=c(rep(52749, 14), rep(46760, 15)),
date=c("2007-01-30","2007-03-15","2007-11-27",
"2007-11-29","2008-10-09","2009-04-02",
"2011-01-06","2011-07-26","2012-01-25",
"2015-01-12","2016-09-13","2017-03-21",
"2017-08-29","2017-10-10","2008-01-01",
"2010-07-19","2011-01-14","2011-08-02",
"2011-08-02","2012-02-01","2012-02-01",
"2015-04-28","2015-10-19","2016-05-16",
"2016-12-22","2016-12-23","2017-05-16",
"2017-11-15","2018-02-22"),
idx=c(seq_len(14), seq_len(15)),
count=c(rep(14,14),rep(15,15)),
event=c(1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1,
1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0))
В результате получается следующее:
id date idx count event
52749 2007-01-30 1 14 1
52749 2007-03-15 2 14 0
52749 2007-11-27 3 14 1
52749 2007-11-29 4 14 0
52749 2008-10-09 5 14 1
52749 2009-04-02 6 14 0
52749 2011-01-06 7 14 1
52749 2011-07-26 8 14 1
52749 2012-01-25 9 14 0
52749 2015-01-12 10 14 1
52749 2016-09-13 11 14 1
52749 2017-03-21 12 14 1
52749 2017-08-29 13 14 0
52749 2017-10-10 14 14 0
46760 2008-01-01 1 15 1
46760 2010-07-19 2 15 1
46760 2011-01-14 3 15 0
46760 2011-08-02 4 15 1
46760 2011-08-02 5 15 0
46760 2012-02-01 6 15 1
46760 2012-02-01 7 15 0
46760 2015-04-28 8 15 1
46760 2015-10-19 9 15 0
46760 2016-05-16 10 15 1
46760 2016-12-22 11 15 1
46760 2016-12-23 12 15 0
46760 2017-05-16 13 15 0
46760 2017-11-15 14 15 1
46760 2018-02-22 15 15 0
По сути, мне нужно следующее:
id date idx count event num_event_5yr_fu num_subevents
52749 2007-01-30 1 14 1 4 8
52749 2007-03-15 2 14 0 NA NA
52749 2007-11-27 3 14 1 3 6
52749 2007-11-29 4 14 0 NA NA
52749 2008-10-09 5 14 1 2 4
52749 2009-04-02 6 14 0 NA NA
52749 2011-01-06 7 14 1 2 3
52749 2011-07-26 8 14 1 1 2
52749 2012-01-25 9 14 0 NA NA
52749 2015-01-12 10 14 1 2 4
52749 2016-09-13 11 14 1 1 3
52749 2017-03-21 12 14 1 0 2
52749 2017-08-29 13 14 0 NA NA
52749 2017-10-10 14 14 0 NA NA
46760 2008-01-01 1 15 1 3 6
46760 2010-07-19 2 15 1 3 6
46760 2011-01-14 3 15 0 NA NA
46760 2011-08-02 4 15 1 3 6
46760 2011-08-02 5 15 0 NA NA
46760 2012-02-01 6 15 1 3 6
46760 2012-02-01 7 15 0 NA NA
46760 2015-04-28 8 15 1 3 7
46760 2015-10-19 9 15 0 NA NA
46760 2016-05-16 10 15 1 2 5
46760 2016-12-22 11 15 1 1 4
46760 2016-12-23 12 15 0 NA NA
46760 2017-05-16 13 15 0 NA NA
46760 2017-11-15 14 15 1 0 1
46760 2018-02-22 15 15 0 NA NA
Где num_event_5yr_fu
подсчитывает количество раз, когда событие произошло (или совокупную сумму в течение этого времени) в течение 5 лет с даты события (не включая дату события), а num_subevents
подсчитывает количество записей в течение 5 лет с момента события. дата (не включая дату события).
Я занимаюсь этим довольно давно, застрял и был бы очень признателен за некоторые комментарии о том, как этого можно достичь. Спасибо.
num_subevents
начинает отсчитываться со следующей строки после события, хотя оно имеет ту же дату события (id == 46760
и даты 2011-08-02 и 2012-02-01). - person Uwe   schedule 02.03.2019