我有两个大型数据集,一个大约一百万条记录,另一个大约 70K。这些数据集有地址。如果较小数据集中的任何地址存在于较大数据集中,我想匹配。正如您所想象的那样,地址可以以不同的方式和不同的情况编写,因此看到应该匹配时没有匹配而不应该匹配时却出现匹配是非常烦人的。我做了一些研究,并找出了可以使用的包 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")
df1 <- data.table(Address1)
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")
df2 <- data.table(Address2)
df1[, key_match := gsub("[^[:alnum:]]", "", Address1)]
df2[, key_match := gsub("[^[:alnum:]]", "", Address2)]
fn_match = function(str, strVec, n){
strVec[amatch(str, strVec, method = "dl", maxDist=n,useBytes = T)]
}
df1[!is.na(key_match)
, address_match :=
fn_match(key_match, df2$key_match,3)
]
如果你看到输出,它会给我 df1 中 address_match 下的匹配项。如果我在我的主要数据上应用相同的代码,则代码从最近 30 小时开始仍在运行。虽然我已经转换为 data.table。不知道如何加快速度。
我正在进一步阅读并遇到 stringdist 矩阵。这似乎更有帮助,我可以根据空间拆分地址并检查每个地址列表中是否存在每个单词,并且根据最大匹配,可以创建匹配摘要。但是我不太擅长循环。如何循环遍历每个单词的较小文件中的每个地址并检查较大文件中的单个地址并创建匹配矩阵?任何帮助!