2016-09-30 31 views
-2

我會很感激在我掙扎在R.與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,但我很努力弄清楚如何計算行的我想要的條件。

我希望這是明確的 - 很樂意提供更多的細節是有幫助的。

真的很感謝這個問題的任何幫助!感謝您的時間。

+0

我不明白什麼是「3個月內」的意思 - 是它最大的任何連續3個月之內,或者是從第一次約會或... ? – eddi

+1

我認爲你需要創建一個可重複的例子。一些指導:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/28481250#28481250 – Frank

+0

謝謝你的迴應Eddi。因此,在這種情況下,我想要指出在第一次日期後的三個月內,ID有多少次再次接受治療 –

回答

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 
+0

完美!這真的很有幫助,並回答我的問題。謝謝! –