【问题标题】:merging data.frame rows based on similar strings in r基于r中的相似字符串合并data.frame行
【发布时间】:2014-12-08 15:08:22
【问题描述】:

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

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

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

Google Refine 等第三方工具可以使用 - 但我更喜欢在 R 中操作。

【问题讨论】:

    标签: r string dataframe data-cleaning stringdist


    【解决方案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 表示我们要获取字符串而不是向量的索引。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 2018-07-22
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多