【问题标题】:How to fuzzy join 2 dataframes on 2 variables with differing "fuzzy logic"?如何模糊连接 2 个具有不同“模糊逻辑”的变量上的 2 个数据帧?
【发布时间】:2020-07-08 01:09:54
【问题描述】:
# example
a <- data.frame(name=c("A","B","C"), KW=c(201902,201904,201905),price=c(1.99,3.02,5.00))
b <- data.frame(KW=c(201903,201904,201904),price=c(1.98,3.00,5.00),name=c("a","b","c"))

我想用模糊逻辑匹配 a 和 b,使用变量 KW 和 price。我想允许 +/- 1 的 KW 容差和 +/- 0.02 的价格容差。

期望的结果应该是这样的:

name.x   KW.x price.x   KW.y price.y name.y
1    A 201902    1.99 201903    1.98      a
2    B 201904    3.02 201904    3.00      b
3    C 201905    5.00 201904    5.00      c

我更愿意使用fuzzyjoin 包找到解决方案。到目前为止,我尝试使用 fuzzy_inner_join 函数并使用 match_fun 参数指定我想要的 KW 和价格公差。但是,我无法让它工作。

寻求帮助,如何解决这个问题。

【问题讨论】:

    标签: r inner-join fuzzyjoin


    【解决方案1】:

    您可以使用mergesubset 创建两个数据帧的笛卡尔积,然后使用符合我们所需条件的行。

    subset(merge(a, b, by = NULL), abs(KW.x - KW.y) <= 1 & 
                                   abs(price.x - price.y) <= 0.02)
    
    #  name.x   KW.x price.x   KW.y price.y name.y
    #1      A 201902    1.99 201903    1.98      a
    #5      B 201904    3.02 201904    3.00      b
    #9      C 201905    5.00 201904    5.00      c
    

    【讨论】:

    • 谢谢@Ronak,刚刚实现了它,它就像一个魅力:)
    • @Ronak,如果我要在匹配代码中添加另一个变量,这是一个字符串并且应该完全匹配,那会是什么样子?
    • 在这种情况下,您可以尝试与by 中的该变量合并,例如subset(merge(a, b, by = 'variable'), abs(KW.x - KW.y) &lt;= 1 &amp; abs(price.x - price.y) &lt;= 0.02)
    猜你喜欢
    • 2020-04-02
    • 2017-11-05
    • 1970-01-01
    • 2016-04-24
    • 2019-02-06
    • 1970-01-01
    • 2011-06-19
    • 2023-04-11
    • 2019-08-28
    相关资源
    最近更新 更多