首页 > 解决方案 > 从单个列中识别模糊重复并使用 R 创建包含模糊重复记录的子集

问题描述

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

标签: rduplicateslevenshtein-distancefuzzy-comparisonagrep

解决方案


推荐阅读