假设我有以下内容:
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" 选项,不会产生预期的结果
您可以使用
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