Похоже, нам нужно fuzzy_join
library(dplyr)
library(fuzzyjoin)
fuzzy_inner_join(df1, df2, by = c('x1' = 'y1', 'x2' = 'y2', 'x3' = 'y2'),
match_fun = list(`==`, `<=`, `>`)) %>%
select(names(df2))
# y1 y2
#1 a 4.0
#2 a 3.5
#3 b 9.8
#4 b 9.5
#5 a 10.0
данные
df1 <- structure(list(x1 = c("a", "b", "a", "c"), x2 = c(3.1, 9, 9,
1.1), x3 = c(4.5, 10.1, 20, 6)), class = "data.frame", row.names = c(NA,
-4L))
df2 <- structure(list(y1 = c("a", "a", "a", "b", "b", "b", "c", "c"),
y2 = c(4, 10, 3.5, 9.8, 9.5, 25, 8.2, 12)), class = "data.frame",
row.names = c(NA,
-8L))