I would like to merge 2 data frames based on multiple conditions.
DF1 <- data.frame(\"col1\" = rep(c(\"A\",\"B\"), 18),
\"col2\" = rep(c
Using my package safejoin which wraps fuzzyjoin functions, you can do :
# devtools::install_github("moodymudskipper/safejoin")
library(safejoin)
debugonce(safe_left_join)
safe_left_join(DF1, DF2, ~
X("col1") == Y("col1") &
X("col2") == Y("col2") &
X("value") >= Y("min") &
X("value") <= Y("max"),
conflict = ~.x) %>%
head(15)
# col1 col2 value col4 data min max
# 1 A C 90 NA NA NA NA
# 2 B D 20 NA NA NA NA
# 3 A E 8 NA NA NA NA
# 4 B C 99 NA NA NA NA
# 5 A D 42 NA NA NA NA
# 6 B E 37 NA NA NA NA
# 7 A C 47 NA 1 40 50
# 8 B D 61 NA NA NA NA
# 9 A E 55 NA NA NA NA
# 10 B C 11 NA NA NA NA
# 11 A D 81 NA NA NA NA
# 12 B E 48 NA NA NA NA
# 13 A C 77 NA NA NA NA
# 14 B D 58 NA NA NA NA
# 15 A E 3 NA NA NA NA
The conflict
argument here tells the function to return only the conflicted columns from the lhs (col1
and col2
).