我有以下两个data.frames:
data.df <- data.frame(dt = c(as.POSIXct(‘2020-01-08 11:30:00’), as.POSIXct(‘2020-01-10 11:30:00’), as.POSIXct(‘2020-01-11 12:30:00’)), v1=c(1,2,3))
lookup.df <- data.frame(ldt = c(as.POSIXct(‘2020-01-08 11:29:00’), as.POSIXct(‘2020-01-08 11:30:00’), as.POSIXct(‘2020-01-08 11:31:00’), as.POSIXct(‘2020-01-10 10:30:00’), as.POSIXct(‘2020-01-10 11:31:00’), as.POSIXct(‘2020-01-11 11:30:00’), as.POSIXct(‘2020-01-12 11:30:00’)), lv=1:7)
对于data.df中的每一行,我想在lookup.df中获取行索引(以匹配合并中的行),其中lookup.df $ ldt> =同一天data.df $ dt。如果没有日期满足该要求,则不适用。因此,在此示例中,理想的输出为:
dt | v1 | ldt | lv
2020-01-08 11:30:00 1 2020-01-08 11:30:00 2
2020-01-10 11:30:00 2 2020-01-10 11:31:00 5
2020-01-11 12:30:00 3 NA NA
注意:我希望使用基本R实现或Zoo实现
假设您的查找时间是有序的,则可以在基数R中执行:
lv <- sapply(data.df$dt, function(x){
which(substr(lookup.df$ldt, 1, 10) == substr(x, 1, 10) & lookup.df$ldt >= x)[1]
})
cbind(data.df, lookup.df[lv,])
#> dt v1 ldt lv
#> 2 2020-01-08 11:30:00 1 2020-01-08 11:30:00 2
#> 5 2020-01-10 11:30:00 2 2020-01-10 11:31:00 5
#> NA 2020-01-11 12:30:00 3 <NA> NA