合并基于r中类似字符串的data.frame行

时间:2014-12-08 15:08:22

标签: r string dataframe data-cleansing stringdist

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

我想用另一列中的单个公共字符串Company A替换这些变体。我看过stringdist和其他功能 - 但他们似乎并不支持这个用例。

这将允许我根据该常用字符串进行汇总/汇总。

Google Refine等第三方工具可以运作 - 但我更愿意在R中运作。

1 个答案:

答案 0 :(得分:1)

使用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表示我们想要获取字符串而不是vector的索引。

如果没有匹配,您可以更改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" 

更重要的是,这不是对称的。 “华沙红裤”(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" 
相关问题