2016-04-11 3 views
0

2つのデータフレームをリンクする必要があります。 1つのデータフレーム(STTest)は、100人の人のための胸部スロートテストからなる。他のデータフレーム(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日以内にある症例をリンクするだけでよい。どのコードを使用して、特定の時間枠内のテストにケースをリンクするだけの条件を設定しますか?

ありがとうございます!

答えて

0

最初に、class()関数を使用してSTTestおよびSTCaseデータセットのTestdateおよびreporteddate列のクラスをチェックします。

日付でない場合は、最初に列をDateにキャストします。

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

その後、2つのデータセットをマージします。今

> 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

ありがとうございます!このコードは、報告された日付を適切なテスト日付に正しくリンクしました。しかし、このコマンドは、これらの3つの観察をサブセット化したように思われる。どのように私が結合されたデータフレームの残りの部分にリンクするのか知っていますか?同時に、同じ個人の以前のテスト日付にリンクされた報告された日付はありませんか? –

+0

@RSnow私はあなたの質問を理解するかどうか分からない。あなたは例を挙げることができますか? – Lamothy

関連する問題