R如果第二个表中的两个日期列在类别上,则匹配一个表中的日期
仅使用base R,我试图迭代并测试table1$DATE是否大于等于table2$START&base 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
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)