当使用R将2个数据帧与公共列链接时,如何指定它仅链接特定时间间隔内的观测值?

当使用R将2个数据帧与公共列链接时,如何指定它仅链接特定时间间隔内的观测值?,r,dataframe,R,Dataframe,我需要连接两个数据帧。一个数据框(STTest)包括100名受试者的链球菌性咽喉炎测试。另一个数据框(STCase)仅包括检测呈阳性的个体。我在下面列出了每个数据帧的一个片段: 测试 patient_master_id Testdate 1 ID001 2011-07-16 2 ID002 2011-09-16 ..... STCase patient_master_id reporteddate 1

我需要连接两个数据帧。一个数据框(
STTest
)包括100名受试者的链球菌性咽喉炎测试。另一个数据框(
STCase
)仅包括检测呈阳性的个体。我在下面列出了每个数据帧的一个片段:

测试

   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只会在特定的时间范围内将案例链接到测试


谢谢

首先使用class()函数分别检查STTest和STCase数据集中的
Testdate
reporteddate
列的类

如果不是日期,首先将列强制转换为
date

> STTest$Testdate <- as.Date(STTest$Testdate)
> STCase$reporteddate <- as.Date(STCase$reporteddate)
>STTest$Testdate STCase$reporteddate int_ans int_ans
患者\主控者\ id测试日期报告日期
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
>int_ans[int_ans$reporteddate
也许你可以试试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))
库(sqldf)

谢谢!此代码将报告日期正确链接到适当的测试日期。但这条命令似乎是这三个观察结果的子集。你知道我将如何将其链接回合并数据帧的其余部分,但同时不让报告日期链接回来自同一个人的早期测试日期吗?@RSnow我不确定我是否理解你的问题。你能举个例子吗?
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))