我非常感谢我在R中努力解决的问题上的一些帮助。
我有一个包含一系列ID,日期和处理的数据框。我的最终目标是计算在给定时间范围内通过治疗发生在ID上的事件的数量。
例如,
ID在三个月的时间内处理A两次,在六个月内四次。我希望有一系列条件列来计算出现次数。
数据框遵循类似的结构:
ID date treatment
1A 20/09/2015 A
1A 21/09/2015 B
1A 22/10/2015 A
2A 22/09/2015 C
2A 20/10/2015 C
我的最终目标是拥有类似......
ID date treatment
1A 01/01/2016 A
1A 01/03/2016 A
1A 01/04/2016 A
1A 01/05/2016 A
1A 01/11/2016 A
2A 01/01/2016 A
2A 01/09/2016 A
分组到......
ID a_within_3_months a_within_6_months...
1A 3 1
2A 0 0
我确定在data.table中这一定是可行的,但是我很难弄清楚如何根据我想要的条件来计算这一行。
我希望这很清楚 - 很高兴提供更多细节是有帮助的。
非常感谢您对此问题的任何帮助!谢谢你的时间。
答案 0 :(得分:0)
这可能就是你要找的东西:
> first_date <- as.Date(
as.character(20140612),
"%Y%m%d")
> data<- data.frame(
ID=c(rep(1,5), rep(2,5)),
date=seq(first_date, by="1 day", length.out=10),
trtm=c(rep("a",3), rep("b",2), rep("c",3), rep("d",2)))
data
ID date trtm
1 2014-06-12 a
1 2014-06-13 a
1 2014-06-14 a
1 2014-06-15 b
1 2014-06-16 b
2 2014-06-17 c
2 2014-06-18 c
2 2014-06-19 c
2 2014-06-20 d
2 2014-06-21 d
> data <- data.table(data)
> data[,.( within=max(date)-min(date),
n_of_trtm=length(date) ),
by=.(ID,trtm)]
ID trtm within n_of_trtm
1: 1 a 2 days 3
2: 1 b 1 days 2
3: 2 c 2 days 3
4: 2 d 1 days 2