【发布时间】:2019-07-20 21:54:11
【问题描述】:
我有一个数据表,其中包含一段时间内的事件和子事件,我有兴趣创建两列:(1) 自事件发生之日起 5 年内是否发生事件的累积滚动总和,以及(二)自事件之日起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 年内(不包括活动日期)的记录。
我在这方面已经有很长一段时间了,我被困住了,非常感谢您就如何实现这一目标提供一些意见。谢谢。
【问题讨论】:
-
拜托,由于您的要求描述与显示的预期结果不符,您能否澄清预期结果?您说两个聚合都不能包含事件 date 但
num_subevents的预期结果从事件之后的下一个 row 开始计数,尽管它具有相同的事件 日期(id == 46760和日期 2011-08-02 和 2012-02-01)。 -
是的,这是正确的,即使它具有相同的事件日期,它仍应包含以下记录。它只是不能计算当前记录上的事件日期,只能计算随后出现的记录。这有意义吗?
标签: r date data.table grouping rolling-computation