2016-04-11 10 views
0

我需要鏈接兩個數據幀。一個數據框(STTest)由100個個體的strep喉嚨測試組成。另一個數據框(STCase)只包含那些測試結果爲正的人。我已經包括以下每個數據幀的一個片段:當使用R將2個數據框與一個公共列相鏈接時,如何指定它只在特定時間間隔內鏈接觀察值?

STTest

patient_master_id Testdate 
1   ID001   2011-07-16 
2   ID002   2011-09-16 
..... 

STCase

patient_master_id reporteddate 
1   ID001   2011-10-13 
2   ID002   2011-09-27 
... 

我可以鏈接基於兩個數據集共享識別患者ID公共列這些情況下。但是,我只需要將報告的案例在測試日期後的15天內聯繫起來。我使用哪些代碼來設置一個條件,其中R只會將案例與特定時間範圍內的測試鏈接起來?

謝謝!

回答

0

首先使用class()函數分別檢查STTest和STCase數據集中的Testdatereporteddate列的類別。

如果不是日期,請首先將列投射到Date

> STTest$Testdate <- as.Date(STTest$Testdate) 
> STCase$reporteddate <- as.Date(STCase$reporteddate) 

之後,合併兩個數據集。

> int_ans <- merge(STTest,STCase) 
> int_ans 
    patient_master_id Testdate reporteddate 
1    ID001 2011-07-16 2011-10-13 
2    ID002 2011-09-16 2011-09-27 

現在,選擇滿足條件的行。

> int_ans[int_ans$reporteddate < int_ans$Testdate + 15,] 
    patient_master_id Testdate reporteddate 
2    ID002 2011-09-16 2011-09-27 
0

也許你可以試試sqldf。

library(sqldf) 

df1<-data.frame(patient_master_id = c('ID001','ID002'), 
      Testdate= c('2011-07-16','2011-09-16')) 

df1$Testdate<-as.Date(df1$Testdate) 

df2<-data.frame(patient_master_id = c('ID001','ID002'), 
      reporteddate= c('2011-10-13','2011-09-27')) 

df2$reporteddate<-as.Date(df2$reporteddate) 

window = 15 

sqldf(paste("select A.patient_master_id, Testdate, reporteddate 
     from df1 as A INNER JOIN df2 as B 
     WHERE A.patient_master_id = B.patient_master_id 
     AND (B.reporteddate - A.Testdate)<",window)) 

您可以相應地調整加入方式和時間窗口。

+0

謝謝!此代碼正確地將報告的日期與適當的測試日期相關聯。但是這個命令似乎已經對這三個觀察進行了子集化。你知道我如何將它鏈接到合併數據框的其餘部分,但是同時沒有報告日期鏈接回來自同一個人的早期測試日期嗎? –

+0

@如果我理解你的問題,我不確定。你能提供一個例子嗎? – Lamothy

相關問題