Самое простое - поместить обе таблицы в длинный формат и соединить их, а затем вернуться к широкоформатному формату, используя тип назначения:
library(tidyverse)
B2 <- B %>%
gather(type,lower_dest) %>%
mutate_at("lower_dest", tolower)
A2 <- A %>%
separate_rows(Destination,sep="\\s*[,&]\\s*") %>%
mutate(lower_dest = tolower(Destination))
left_join(A2, B2, by = "lower_dest") %>%
group_by(Name, type) %>%
summarize_at("Destination", paste,collapse=", ") %>%
spread(type, Destination) %>%
ungroup
# # A tibble: 4 x 4
# Name City Continent Country
# * <chr> <chr> <chr> <chr>
# 1 Alex <NA> North America, Europe France
# 2 Charlie New York Europe China, India
# 3 Lophy Delhi Antartica, Europe UK
# 4 Mike Boston, London <NA> Germany, Australia
data
A <-
tribble(~Name , ~Destination ,
'Alex' , 'North America, Europe & France',
'Mike' , 'Boston, London, Germany, Australia',
'Charlie' , 'China, Europe, India, New York',
'Lophy' , 'Antartica, UK, Europe, Delhi')
# anatartica typo corrected into antartica
B <- tribble(~Continent, ~Country, ~City,
'north america' , 'france' , 'boston' ,
'antartica' , 'germany' , 'london' ,
'europe' , 'australia' , 'delhi' ,
'XYZ' , 'china' , 'new york' ,
'ABC' , 'india' , 'RST' ,
'PQR' , 'UK' , 'JKL')