我有一个数据集,其中包含一个带有个人姓名的字段。有些名称相似,但有细微差别,例如“CANON INDIA PVT”。LTD'和'佳能印度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 将输出作为向量索引。但是,我想提取仅属于名称相似的所有记录?