Мы можем использовать regex_left_join
от fuzzyjoin
library(fuzzyjoin)
library(dplyr)
library(stringr)
regex_left_join(df1, mutate(df2, id = str_remove(id, ",")),
by = "id", ignore_case = TRUE) %>%
select(id = id.x, v1, v2, v3, M4, N4)
# id v1 v2 v3 M4 N4
#1 xxx, 12 11 13 21 6
#2 MMM w n m 10 23
#3 GgG Q n m 12 5
#4 bccde, w P m 11 11
#5 QMC <NA> T p NA NA
Или с select
everything()
regex_left_join(df1, mutate(df2, id = str_remove(id, ",")),
by = "id", ignore_case = TRUE) %>%
select(everything(), id = id.x, -id.y)
# id v1 v2 v3 M4 N4
#1 xxx, 12 11 13 21 6
#2 MMM w n m 10 23
#3 GgG Q n m 12 5
#4 bccde, w P m 11 11
#5 QMC <NA> T p NA NA