匹配 R 中最近的较早时间戳

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

假设我有以下内容:

dates1 <-  as.POSIXct(c("2015-10-26 12:00:00","2015-10-26 13:00:00","2015-10-26 14:00:00"))
values1 <- c("a","b","c")

dates2 <- as.POSIXct(c("2015-10-26 11:59:00","2015-10-26 12:00:10"))
values2 <- c("A","C")

df1 <- data.frame(dates1, values1)
df2 <- data.frame(dates2, values2)

我想将 df2 中的 value2 合并到 df1 中,其中我想在 df1 中的时间戳之前选择 df2 中最近的时间戳。例如,对于 12:00:00,我想选择 11:59:00,而不是 12:00:10(这是最近的,但不是 12:00:00 之前最近的)。我的预期输出是:

                dates1 values2 values1   dates2
1: 2015-10-26 12:00:00       A       a   2015-10-26 11:59:00
2: 2015-10-26 13:00:00       c       b   2015-10-26 12:00:10
3: 2015-10-26 14:00:00       c       c   2015-10-26 12:00:10

使用 data.table 中的 roll =“nearest” 选项不会产生预期的结果。有人可以帮助我吗?

使用 data.table 中的 roll = "nearest" 选项,不会产生预期的结果

r data.table
1个回答
0
投票

您可以使用

dplyr::join_by()
dplyr::closest()
来完成此操作。

library(dplyr)

df1 %>% 
  left_join(
    df2,
    join_by(
      closest(y$dates2 <= x$dates1)
    )
  )
#>                dates1 values1              dates2 values2
#> 1 2015-10-26 12:00:00       a 2015-10-26 11:59:00       A
#> 2 2015-10-26 13:00:00       b 2015-10-26 12:00:10       C
#> 3 2015-10-26 14:00:00       c 2015-10-26 12:00:10       C
© www.soinside.com 2019 - 2024. All rights reserved.