R如果第二个表中的两个日期列在类别上,则匹配一个表中的日期

R如果第二个表中的两个日期列在类别上,则匹配一个表中的日期,r,R,仅使用base R,我试图迭代并测试table1$DATE是否大于等于table2$START&base R,这不会给您提供最有效的方法,尤其是在大数据上,但这里有一个尝试 df1$Date <- as.Date(df1$Date, '%m/%d/%Y') df2$Start <- as.Date(df2$Start, '%m/%d/%Y') df2$Stop <- as.Date(df2$Stop, '%m/%d/%Y') df1$result <- sapply(s

仅使用base R,我试图迭代并测试table1$DATE是否大于等于table2$START&base R,这不会给您提供最有效的方法,尤其是在大数据上,但这里有一个尝试

df1$Date <- as.Date(df1$Date, '%m/%d/%Y')
df2$Start <- as.Date(df2$Start, '%m/%d/%Y')
df2$Stop <- as.Date(df2$Stop, '%m/%d/%Y')

df1$result <- sapply(seq_len(nrow(df1)), function(x) {
   inds <- df2$Event == df1$Event[x] & 
           df1$Date[x] >= df2$Start & df1$Date[x] <= df2$Stop
   if (any(inds)) df2$Return[which.max(inds)]  else NA
})

df1
#  Event       Date result
#1     A 2000-01-01   <NA>
#2     A 2019-02-15    abc
#3     B 2000-01-01   <NA>
#4     B 2019-02-15    bar
#5     B 2019-12-12   <NA>
#6     C 2017-07-07   <NA>
资料


请使用dput添加数据,我们无法使用屏幕截图测试任何可能的解决方案。我想你正在寻找一个非平等的加入@Ronak Shah,哇,这是完美的。非常感谢你!
df1 <- data.frame(Event = c('A', 'A', 'B', 'B', 'B','C'), Date = c('1/1/2000', 
                  '2/15/2019', '1/1/2000', '2/15/2019', '12/12/2019','7/7/2017'),
                   stringsAsFactors = FALSE)

df2 <- data.frame(Event = c('A', 'B', 'B', 'A', 'A'), 
       Start = c('1/1/2019','2/1/2019', '1/1/2019','2/1/2019', '3/1/2019'), 
       Stop = c('1/31/2019','2/28/2019', '1/31/2019', '2/28/2019', '3/30/2019'), 
       Return = c('foo', 'bar', 'baz', 'abc', 'xyz'), stringsAsFactors = FALSE)