我在下面有一个示例,我需要执行具有多个条件的右连接:
第一个数据框:
df_1 <- data_frame(
dates = c(as.Date("2023-03-01"), as.Date("2023-03-05"), as.Date("2023-03-03"), as.Date("2023-02-27"), as.Date("2023-02-26"), as.Date("2023-01-26"), as.Date("2023-01-29"), as.Date("2022-12-27")),
id = c("03","02","03","04","04","09","09","05"),
x2 = c(20, 21, 22, 23, 24, 25, 26, 27))
第二个数据框:
df_2 <- data_frame(
id = c("02","03","04","05","09"))
我正在尝试将 x2 列中的值从第一个数据帧映射到第二个数据帧。在这种情况下,可能有多个匹配项,我想优先匹配 2023 年 3 月 1 日的值。如果 2023-03-01 没有值,我将尝试将该值与 3 月份距离 2023-03-01 最接近的下一天进行匹配(例如 2023-03-05)。
如果 3 月份仍然没有匹配项,那么我会尝试将值与过去最接近 2023-03-01 的日期(例如 2023-02-27)进行匹配。请在下面找到所需的输出:
df_3 <- data_frame(
id = c("02","03","04","05","09"),
x2 = c(21, 20, 23, 27, 26))
这是一个有点棘手的情况,所以如果有人有任何建议,我们将不胜感激!
df_2 |>
left_join(slice_min(df_1, abs(as.Date("2023-03-01")-dates), by=id)) |>
select(-dates)
# A tibble: 5 × 2
id x2
<chr> <dbl>
1 02 21
2 03 20
3 04 23
4 05 27
5 09 26