Correspondência de cadeia difusa R para retornar coluna específica com base na cadeia correspondente

Eu tenho dois grandes conjuntos de dados, um em torno de meio milhão de registros e o outro em torno de 70K. Esses conjuntos de dados têm endereço. Quero corresponder se algum endereço no conjunto de dados menor estiver presente no endereço grande. Como você imagina, o endereço pode ser escrito de maneiras diferentes e em diferentes casos / grafias etc. Além desse endereço, pode ser duplicado se for escrito apenas até o nível do edifício. Portanto, apartamentos diferentes têm o mesmo endereço. Eu fiz algumas pesquisas e descobri o pacote stringdist que pode ser usado.

Eu trabalhei e consegui a correspondência mais próxima com base na distância. No entanto, não consigo retornar as colunas correspondentes às quais o endereço corresponde.

Abaixo está um exemplo de dados fictícios, juntamente com o código que eu criei para explicar a situação

library(stringdist)
Address1 <- c("786, GALI NO 5, XYZ","rambo, 45, strret 4, atlast, pqr","23/4, 23RD FLOOR, STREET 2, ABC-E, PQR","45-B, GALI NO5, XYZ","HECTIC, 99 STREET, PQR","786, GALI NO 5, XYZ","rambo, 45, strret 4, atlast, pqr")
Year1 <- c(2001:2007)

Address2 <- c("abc, pqr, xyz","786, GALI NO 4 XYZ","45B, GALI NO 5, XYZ","del, 546, strret2, towards east, pqr","23/4, STREET 2, PQR","abc, pqr, xyz","786, GALI NO 4 XYZ","45B, GALI NO 5, XYZ","del, 546, strret2, towards east, pqr","23/4, STREET 2, PQR")
Year2 <- c(2001:2010)

df1 <- data.table(Address1,Year1)
df2 <- data.table(Address2,Year2)
df2[,unique_id := sprintf("%06d", 1:nrow(df2))]

fn_match = function(str, strVec, n){
  strVec[amatch(str, strVec, method = "dl", maxDist=n,useBytes = T)]
}

df1[!is.na(Address1)
    , address_match := 
      fn_match(Address1, df2$Address2,3)
    ]

Isso me devolve a correspondência de string fechada com base na distância de 3, no entanto, eu também queria ter colunas "Year" e "unique_id" do df2 no df1. Isso me ajudaria a saber com qual linha de dados a string foi correspondida no df2. Então, finalmente, eu quero saber porcada linha no DF1 qual foi a correspondência do armário do df2 com base na distância especificada e tem para as linhas correspondentes as especificidades"Ano" e"unique_id" do df2.

Eu acho que há algo a ver com mesclagem (junção esquerda), mas não sei como posso mesclar mantendo as duplicatas e garantindo que eu tenha o mesmo número de linhas que no df1 (conjunto de dados pequeno).

Qualquer tipo de solução ajudaria !!

questionAnswers(2)

yourAnswerToTheQuestion