tidyverse, join, filter near ( ):
library(tidyverse)
df1 <- data_frame(v1 = c(500, 500, 500, 500, 500),
v2 = c(40, 40, 40, 40, 40),
v3 = c(5.2, 7.2, 9.0, 3.5, 4.2),
v4 = c("z1", "z2", "z3", "z4", "z5"))
df2 <- data_frame(v1 = c(500, 500, 500, 500, 500),
v2 = c(40, 40, 20, 40, 40),
v3 = c(5.1, 7.9, 8.6, 3.7, 4.0),
v4 = c("m1", "m2", "m3", "m4", "m5"))
df1 %>%
full_join(df2, by = c("v1", "v2")) %>%
filter(near(v3.x, v3.y, tol = 0.21)) %>%
rename(v3 = v3.x, v4 = v4.x) %>%
select(v1:v4)
v1 v2 v3 v4
<dbl> <dbl> <dbl> <chr>
1 500. 40. 5.20 z1
2 500. 40. 3.50 z4
3 500. 40. 4.20 z5