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 !!