-2

我有一个包含多列的 data.frame。第一列包含公司名称。这些已由用户输入,并且许多值包含代表相同实体的相似字符串。例如 Company A Pty. Company A Pty. Ltd. Company A Georgia。

我想用另一列中的单个常见字符串 Company A 替换这些变体。我看过 stringdist 和其他函数——但它们似乎不支持这个用例。

然后,这将允许我基于该公共字符串进行总结/聚合。

诸如 Google Refine 之类的第三方工具可以工作——但我更愿意在 R 中操作。

4

1 回答 1

2

使用agrep功能。

初始数据:

x <- c("Company A Pty.","BigData GMBH","Company A Pty. Ltd.","Red Pants Warsaw", "Company A Georgia", "Red Pants Ltd", "BlueSocks House")

第一个参数是您想要在数据中查看的模式(例如 x[1]),第二个是您想要查看的位置,max是两个字符串可以不同的最大距离。value意味着我们要获取字符串而不是向量的索引。

如果没有匹配,您可以更改max,但要小心!更多并不总是更好。

agrep(x[1],x, max=0.1, value=TRUE)
## [1] "Company A Pty."      "Company A Pty. Ltd."
agrep(x[1],x, max=0.3, value=TRUE)
## [1] "Company A Pty."      "Company A Pty. Ltd." "Company A Georgia"  
agrep(x[1],x, max=0.7, value=TRUE)
## [1] "Company A Pty."      "Company A Pty. Ltd." "Company A Georgia"   "Red Pants Ltd" 

更重要的是,这不是对称的。“Red Pants Warsaw”(x[4])与“Red Pants Ltd”(x[6])不匹配,但它以其他方式工作 - x[6] 与 x[4] 匹配。请注意这一点。

agrep(x[4],x, max=0.2, value=TRUE)
## [1] "Red Pants Warsaw"
agrep(x[6],x, max=0.2, value=TRUE)
## [1] "Red Pants Warsaw" "Red Pants Ltd" 
于 2014-12-23T14:19:13.253 回答