使用R中的时间 - 按ID

时间:2016-09-30 21:07:44

标签: r data.table

我非常感谢我在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中这一定是可行的,但是我很难弄清楚如何根据我想要的条件来计算这一行。

我希望这很清楚 - 很高兴提供更多细节是有帮助的。

非常感谢您对此问题的任何帮助!谢谢你的时间。

1 个答案:

答案 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