【问题标题】:match two datasets with record linkage in R将两个数据集与 R 中的记录链接匹配
【发布时间】:2018-08-24 08:39:17
【问题描述】:

我正在尝试匹配 R 中的两个数据集:datasetA 和 datasetB。这些数据集包含以下列。

数据集A

  • ID:15
  • 姓名:彼得·桑德斯
  • 名字:彼得
  • 姓:桑德斯
  • ORG_NAME:咖啡和蛋糕
  • 城市:纽约
  • 金额(美元):10369
  • 类别:食品和饮料
  • 日期:2014 年 12 月 1 日

datasetB 有类似的列:

  • ORG_ID:5241
  • 姓名:彼得·桑德
  • 名字:彼得
  • 姓:桑德
  • 公司名称:咖啡和蛋糕
  • 地点:纽约
  • 资助:10000
  • sub_cat:餐馆
  • 开始日期:2013-01-09 16:42:56
  • 结束日期:2015-01-04 11:43:39

唯一完全匹配的是名字“peter”。但是我的数据集包含许多公司,所以我的数据集中会有很多不是同一个人的“彼得”。因此,我想在多列中匹配相似度。

我想根据所有列中的信息来匹配这两个数据集。我想我需要 Levenshtein Similarity 和 compare.linkage ,但是我没有成功。

有谁知道我如何匹配这个?任何帮助将不胜感激。

【问题讨论】:

  • 首先,您需要共享一个可重现的示例,其次,如果两个数据集之间有一个共同的 Pkey,则根本不需要相似性方法,可能是一些数据清理,即使用 reg exp将 & 转换为并使其正常工作。
  • 谢谢拉娜,我调整了问题。不幸的是,我没有可以用来匹配数据集的通用 Pkey。
  • 可重复的例子会做很多事情

标签: r compare matching levenshtein-distance record-linkage


【解决方案1】:

由于数据不可用且我无法提供太多意见,但这应该可以帮助您入门。

我根据您的问题创建了小型数据集。

df <- data.frame(name="Peter Sanders", firstname="peter", lastname = "sanders", 
                 org= "coffee&cake")

df1 <- data.frame(name="Peter Sandesadasdasdasr", firstname="peter", lastname = "sander", 
                 cname= "coffee and cake")

我使用R 的内置函数dist() 使用manhattan 距离查找相似度

dist(cbind(unlist(df1), unlist(df)), "manhattan")

结果

          name firstname lastname
firstname    2                   
lastname     4         2         
cname        6         4        2

【讨论】:

    猜你喜欢
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 2022-10-07
    • 1970-01-01
    相关资源
    最近更新 更多