Результат:
я есть два больших набора данных, один около полумиллиона записей, а другой около 70K. Эти наборы данных имеют адрес. Я хочу сопоставить, если какой-либо адрес в меньшем наборе данных присутствует в большом. Как вы можете себе представить, адрес может быть написан по-разному и в разных случаях / написания и т. Д. Помимо этого адрес может быть продублирован, если написано только до уровня здания. Так что разные квартиры имеют один и тот же адрес. Я провел небольшое исследование и выяснил, какой пакет строки можно использовать.
Я проделал некоторую работу и сумел найти ближайший матч по дистанции. Однако я не могу вернуть соответствующие столбцы, для которых адрес совпадает.
Ниже приведен пример фиктивных данных вместе с кодом, который я создал для объяснения ситуации.
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)
]
Это возвращает мне закрытое совпадение строк, основанное на расстоянии 3, однако я хотел также иметь столбцы "Year" и "unique_id" из df2 в df1. Это помогло бы мне узнать, какой строке данных соответствует строка из df2. Итак, наконец, я хочу знать, длякаждая строка в df1 каково было совпадение шкафа от df2 на основе указанного расстояния и для соответствующих строк"Год" а также"unique_id" из df2.
Я предполагаю, что есть какое-то отношение к слиянию (левое соединение), но я не уверен, как я могу слить, сохраняя дубликаты и гарантируя, что у меня будет то же количество строк, что и в df1 (небольшой набор данных).
Любое решение поможет !!