R 带有日期范围检查的表联接

R 带有日期范围检查的表联接,r,dplyr,R,Dplyr,我想将两个表连接在一起,其中连接基于日期字段中的日期,该字段位于特定的(开始日期、结束日期)范围内。在R中有没有一种优雅的方法可以做到这一点(通过dplyr或其他方式) 例如,如果我有: x <- data.frame( Ref = c(1:5), Event_Date = as.Date(c("2014-03-31", "2013-12-01", "2016-07-13", "2017-04-13", "2015-02-01")) ) y <- dat

我想将两个表连接在一起,其中连接基于日期字段中的日期,该字段位于特定的(开始日期、结束日期)范围内。在R中有没有一种优雅的方法可以做到这一点(通过dplyr或其他方式)

例如,如果我有:

x <- data.frame(
       Ref = c(1:5),
       Event_Date = as.Date(c("2014-03-31", "2013-12-01", "2016-07-13", "2017-04-13", "2015-02-01"))
)

y <- data.frame(
       Period_ID = c(2013:2016),
       Period_Start = as.Date(c("2013-01-01", "2014-01-01", "2015-01-01", "2016-01-01")),
       Period_End = as.Date(c("2013-12-31", "2014-12-31", "2015-12-31", "2016-12-31"))
)
但匹配项不是“日期=查找日期”,而是“日期在范围内(开始日期、结束日期)

换句话说,我想看到的是:


谢谢。

这看起来像是sqldf的工作,它允许您在SQL中建立连接。(SQL有直接表达连接条件的语言手段。)


这看起来像是
sqldf
的一个作业,它允许您在SQL中建立连接(SQL具有直接表示连接条件的语言手段)


使用data.table,可以使用更新联接将新列添加到x

library(data.table)
setDT(x)
setDT(y)

x[y, on = .(Event_Date >= Period_Start, Event_Date <= Period_End),
  Period_ID := i.Period_ID]

x
#    Ref Event_Date Period_ID
# 1:   1 2014-03-31      2014
# 2:   2 2013-12-01      2013
# 3:   3 2016-07-13      2016
# 4:   4 2017-04-13        NA
# 5:   5 2015-02-01      2015
库(data.table)
setDT(x)
setDT(y)

x[y,on=(Event_Date>=Period_Start,Event_Date使用data.table,可以使用更新联接将新列添加到x

library(data.table)
setDT(x)
setDT(y)

x[y, on = .(Event_Date >= Period_Start, Event_Date <= Period_End),
  Period_ID := i.Period_ID]

x
#    Ref Event_Date Period_ID
# 1:   1 2014-03-31      2014
# 2:   2 2013-12-01      2013
# 3:   3 2016-07-13      2016
# 4:   4 2017-04-13        NA
# 5:   5 2015-02-01      2015
库(data.table)
setDT(x)
setDT(y)
x[y,on=(事件日期>=时段开始,事件日期
  Ref Event_Date Period_ID
1   1 2014-03-31      2014
2   2 2013-12-01      2013
3   3 2016-07-13      2016
4   4 2017-04-13        NA
5   5 2015-02-01      2015
library(data.table)
setDT(x)
setDT(y)

x[y, on = .(Event_Date >= Period_Start, Event_Date <= Period_End),
  Period_ID := i.Period_ID]

x
#    Ref Event_Date Period_ID
# 1:   1 2014-03-31      2014
# 2:   2 2013-12-01      2013
# 3:   3 2016-07-13      2016
# 4:   4 2017-04-13        NA
# 5:   5 2015-02-01      2015