从单个列中识别模糊重复项,并使用R创建包含模糊重复项记录的子集

时间:2019-07-12 12:52:40

标签: r duplicates levenshtein-distance fuzzy-comparison agrep

我有一个数据集,其中包含带有个人姓名的字段。一些名称类似,但有微小的区别,例如'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会将输出作为矢量索引。但是,我想提取仅属于名称相似的所有记录吗?

0 个答案:

没有答案