You can use fuzzyjoins
library(dplyr)
library(fuzzyjoin)
tbl1 <- tibble::tribble(
~tbl1_id, ~number,
1, 5,
2, 2,
3, 2.25,
4, 2.6,
5, 3.2,
6, 10,
6, 3,
7, 5
)
tbl2 <- tibble::tribble(
~tbl2_id, ~start, ~end,
1, 4, 6,
2, 2.5, 3.3,
3, 7, 8
)
tbl1 %>%
fuzzy_left_join(tbl2,
by = c("number" = "start",
"number" = "end"),
match_fun = list(`>=`, `<=`)
) %>%
select(tbl1_id, number, tbl2_id)
#> # A tibble: 8 x 3
#> tbl1_id number tbl2_id
#> <dbl> <dbl> <dbl>
#> 1 1 5 1
#> 2 2 2 NA
#> 3 3 2.25 NA
#> 4 4 2.6 2
#> 5 5 3.2 2
#> 6 6 10 NA
#> 7 6 3 2
#> 8 7 5 1
Created on 2019-02-11 by the reprex package (v0.2.1)