我有一个数据集,其中包含带有个人姓名的字段。一些名称类似,但有微小的区别,例如'CANON INDIA PVT。 LTD”和“ CANON INDIA PVT。 LTD。”,“ Antila,Thomas”和“ ANTILA THOMAS”, “ Z_SANDSTONE COOLING LTD”和“ SANDSTONE COOLING LTD”等。我需要识别此类模糊重复项并创建一个包含这些记录的新子集。我有一个包含此类记录的巨大表格,因此,我只是在制作样本。
| Name | City |
|-------------------------|:-------:|
| CANON PVT. LTD | Georgia |
| Antila,Thomas | Georgia |
| Greg | Georgia |
| St.Luke's Hospital | Georgia |
| Z_SANDSTONE COOLING LTD | Georgia |
| St.Luke's Hospital | Georgia |
| CANON PVT. LTD. | Georgia |
| SANDSTONE COOLING LTD | Georgia |
| Greg | Georgia |
| ANTILA,THOMAS | Georgia |
我希望输出为:
| Name | City |
|-------------------------|:-------:|
| CANON PVT. LTD | Georgia |
| CANON PVT. LTD. | Georgia |
| Antila,Thomas | Georgia |
| ANTILA,THOMAS | Georgia |
| Z_SANDSTONE COOLING LTD | Georgia |
| SANDSTONE COOLING LTD | Georgia |
我尝试使用RecordLinkage和agrep,但是它们给出原始数据作为输出。
library(RecordLinkage)
ClosestMatch2 = function(string, stringVector){
distance = levenshteinSim(string, stringVector);
stringVector[distance == max(distance)]
}
Fuzzy_duplicate=ClosestMatch2(df$Name, df$Name)
另一种方法是:
lapply(df$Name, agrep, df$Name, value = TRUE)
使用agrep会将输出作为矢量索引。但是,我想提取仅属于名称相似的所有记录吗?