如何进行多个条件的右连接?

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

我在下面有一个示例,我需要执行具有多个条件的右连接:

第一个数据框:

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))

这是一个有点棘手的情况,所以如果有人有任何建议,我们将不胜感激!

r dataframe date multiple-conditions right-join
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.