如何模糊连接 2 个具有不同 "fuzzy logic" 的变量的 2 个数据帧?
How to fuzzy join 2 dataframes on 2 variables with differing "fuzzy logic"?
# 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"))
我想用变量 KW 和价格用模糊逻辑匹配 a 和 b。我想允许 KW 的公差为 +/- 1,价格的公差为 +/- 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 和价格公差。但是,我无法让它工作。
寻求帮助,如何解决这个问题。
您可以使用 merge
创建两个数据帧的笛卡尔积,然后 subset
符合我们要求条件的行。
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
# 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"))
我想用变量 KW 和价格用模糊逻辑匹配 a 和 b。我想允许 KW 的公差为 +/- 1,价格的公差为 +/- 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 和价格公差。但是,我无法让它工作。
寻求帮助,如何解决这个问题。
您可以使用 merge
创建两个数据帧的笛卡尔积,然后 subset
符合我们要求条件的行。
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