One option is the fuzzyjoin package. See this thread for a couple examples:
If you’re working with large datasets, you’re probably better off with foverlaps() from data.table.
foverlaps()