r - 如何在每侧使用多个变量在 R 中进行模糊连接
问题描述
我想加入两个数据框:
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
但是虽然数据看起来不错,但模糊左连接不接受它。
我寻找在更一般情况下工作的解决方案(LHS 上的 n 个变量,RHS 上的 m 个变量,不一定是任意条件的数字)。
更新
我也希望能够在(x=start+1)|(x=end+1)
这里表达条件,比如给:
# x y
#1 1 a
#2 3 a
#3 5 b
解决方案
对于这种情况,您不需要multi_by
or multy_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
推荐阅读
- arm - Atmel / Microchip studio I2C 通信 ASF 框架工作
- python-3.x - 使用 numpy 进行文件操作
- python-3.x - 如何使用 MongoEngine Python 根据文档中字典中的键对 MongoDB 中的文档进行排序?
- dialogflow-es - 在 Dialogflow Essentials 中重新提示用户输入
- python - 凭据过期时如何重新发送 cognito 邀请
- ansible - 如何包含角色(vars)目录中的变量?
- excel - 在 Excel 中调用时返回运行时错误 '438 的 Word 函数
- ionic-framework - 无法添加名称为“googleServices”的扩展程序,因为已使用该名称注册了一个扩展程序。- 离子电容器
- android - 将 Android 项目转移到 Git 私有服务器
- angular - 使用 Angular 和 JWT 令牌持续登录