Perhaps, you can look into stringdist
joins from fuzzyjoin
and play with max_dist
parameter which is suitable for your data.
fuzzyjoin::stringdist_inner_join(df1, df2, by = 'freetext', max_dist = 10)
# freetext.x numid freetext.y aid
# <chr> <dbl> <chr> <dbl>
#1 open until monday night 291 open until night 3
#2 one more time to insert your coin 312 one time to insert your be 5