r - 如何在 R 中使用每一侧多个变量进行模糊连接

标签 r merge fuzzy-search fuzzyjoin

我想加入两个数据框:

a <- data.frame(x=c(1,3,5))
b <- data.frame(start=c(0,4),end=c(2,6),y=c("a","b"))

条件如(x>start)&(x<end)为了得到这样的结果:

#  x    y
#1 1    a
#2 2 <NA>
#3 3    b

我不想制作一个潜在的大笛卡尔积,然后只选择与条件匹配的几行,并且我想要一个使用 tidyverse 的解决方案(我对使用 SQL 的解决方案不感兴趣,这将是一个坦白的失败)。我想到了“fuzzyjoin”包,但找不到适合我需要的示例:应用条件的函数只有两个参数。我还尝试将“开始”和“结束”放入一个参数中 data.frame(z=I(purrr::map2(b$start,b$end,list)),y=b$y) # z y #1 0, 2 a #2 4, 6 b

虽然数据看起来不错,但 fuzzy_left_join 不接受它。

我寻找适用于更一般情况的解决方案(左侧有 n 个变量,右侧有 m 个变量,不一定是具有任意条件的数字)。

更新

我还希望能够表达像 (x=start+1)|(x=end+1) 这样的条件在这里给出:

#   x  y
#1  1  a
#2  3  a
#3  5  b

最佳答案

对于这种情况,您不需要 multi_bymulty_match_fun,这有效:

library(fuzzyjoin)
fuzzy_left_join(a, b, by = c(x = "start", x = "end"), match_fun = list(`>`, `<`))
#   x start end    y
# 1 1     0   2    a
# 2 3    NA  NA <NA>
# 3 5     4   6    b

关于r - 如何在 R 中使用每一侧多个变量进行模糊连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50583341/

相关文章:

r - mclapply 与 for 循环绘图 : speed and scalability focus

合并 XTS 数据时重复值

ruby - 如何在 Ruby 中合并数组中的子数组?

sql-server - 是否可以在没有SSIS的情况下执行T-SQL模糊查找?

sql-server - SQL模糊匹配

R: ggplot2 - switch 参数没有按预期工作

r - 在 R 中创建一个二元指标矩阵( bool 矩阵)

r - 填充有限数量的值 - tidyr Fill

git - 可以永远使用同一个本地分支吗

elasticsearch - Elasticsearch 模糊搜索未找到所需结果