匹配R中最近的较早时间戳[重复]

8aqjt8rx  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(123)

此问题已在此处有答案

Join two datasets based on an inequality condition(4个答案)
2天前关闭。
假设我有以下内容:

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中的values2合并到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”选项,不会产生预期的结果

n53p2ov0

n53p2ov01#

你可以用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

相关问题