R 带有日期范围检查的表联接
我想将两个表连接在一起,其中连接基于日期字段中的日期,该字段位于特定的(开始日期、结束日期)范围内。在R中有没有一种优雅的方法可以做到这一点(通过dplyr或其他方式) 例如,如果我有: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
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