合并R中的两个数据集(基于ID和范围日期)

时间:2015-11-10 18:09:59

标签: r

我有两个大数据集。

  • 第一个数据集包括ID,开始时间和结束时间。
  • 第二个数据集包括ID,开始时间和结束时间。

我想基于ID和开始时间合并这两个数据集,考虑到第一个数据集中的每个日期可以合并到任何日期,其范围为5天或更多。这意味着如果我们在第一个数据集中有23/4/2012,它可以合并到2012年4月18日到2012年4月28日之间的任何启动日期。

输入数据:

x<-c(1,2,3,4,5,6,6,7,7,8,8,9,10)
StartTime<-c(24/5/1980,2/6/1932,24/6/1945,25/9/1954,12/11/1970,14/3/1984,15/5/1999,20/5/1990,25/9/1981,28/2/1980,29/1/1984,24/4/1987,30/6/1988)
Endtime<-c(24/6/1980,2/8/1932,24/9/1945,25/10/1954,14/11/1970,14/12/1984,15/10/1999,26/5/1990,29/9/1981,28/3/1980,29/1/1984,24/6/1987,30/7/1988)
df1<-data.frame(x,StartTime,Endtime)

x<-c(1,1,1,2,2,3,3,4,5,5,6,6,7)
StartTime<-c(29/5/1980,20/5/1980,23/5/1945,5/6/1932,7/6/1932,27/6/1945,20/6/1945,20/5/1990,25/9/1981,28/2/1980,29/3/1984,24/5/1987,30/7/1988)
Endtime1<-c(24/6/1980,2/8/1990,24/9/1945,25/10/1954,14/11/1970,14/12/1984,15/10/1999,26/5/1990,29/9/1981,28/3/1980,29/1/1984,24/6/1987,30/7/1988)
df2<-data.frame(x,StartTime,Endtime2)

1 个答案:

答案 0 :(得分:3)

使用as.POSIXct()https://stat.ethz.ch/R-manual/R-devel/library/base/html/as.POSIXlt.html

将日期字符串转换为日期
library(sqldf)
df3 <- sqldf("SELECT df1.*, df2.* FROM df1 INNER JOIN df2 ON julianday(df1.StartDate) - julianday(df2.StartDate) BETWEEN -5 AND 5 AND df1.ID = df2.ID")