使用R中的时间-按ID对时间间隔进行分类

使用R中的时间-按ID对时间间隔进行分类,r,data.table,R,Data.table,我真的很感激能在我在R中努力解决的问题上得到一些帮助 我有一个带有一系列ID、日期和处理的数据框。我的最终目标是统计在给定时间范围内通过治疗发生在ID上的事件数 比如说, ID在三个月内接受两次治疗,在六个月内接受四次治疗。我希望有一系列的条件列来计算出现的次数 数据框的结构类似于: ID date treatment 1A 20/09/2015 A 1A 21/09/2015 B 1A 22/10/2015 A 2A 22/09/2015 C 2A

我真的很感激能在我在R中努力解决的问题上得到一些帮助

我有一个带有一系列ID、日期和处理的数据框。我的最终目标是统计在给定时间范围内通过治疗发生在ID上的事件数

比如说,

ID在三个月内接受两次治疗,在六个月内接受四次治疗。我希望有一系列的条件列来计算出现的次数

数据框的结构类似于:

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中一定是可能的,但我正在努力找出如何根据我想要的条件计算行数

我希望这是明确的-高兴地提供更多的细节是有益的


非常感谢您在这个问题上的帮助!谢谢您的时间。

这可能就是您想要的:

> 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
>第一个日期数据[,(以内=最大(日期)-最小(日期),
n_of_trtm=长度(日期)),
by=(ID,trtm)]
ID trtm在n_trtm内
1:1A 2天3
2:1 b 1天2
3:2 c 2天3
4:2天1天2

我不清楚“3个月内”是什么意思-它是连续3个月内的最大值,还是从第一次约会开始,还是…?我认为您需要创建一个可复制的示例。一些指导:谢谢你的回复,埃迪。因此,在这种情况下,我想计算ID在第一次约会后的三个月内再次接受治疗的次数谢谢Frank,我会看一看并尝试创建这个。回复评论时,请使用
@
通知您回复的人;例如,您最后的评论应该包括
@Eddi
@Frank
,以便这些用户收到通知。这些用户很可能从未看到过你的最后两条评论。看(这就是我发现这个问题的原因)。太好了!这真的很有帮助,回答了我的问题。非常感谢。