您将如何查找下一个最近的值?

问题描述 投票:0回答:1

我有以下两个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 dataframe data-manipulation zoo posixct
1个回答
0
投票

假设您的查找时间是有序的,则可以在基数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
© www.soinside.com 2019 - 2024. All rights reserved.