r - R比较来自一个数据帧的值与来自另一个数据帧的值
问题描述
我对 R 很陌生,所以还在学习很多东西。我一直在四处寻找,但找不到适合我问题的答案。我有这两个数据集:
d1
Criteria Order Low High
1 a 1 0 10
2 a 1 11 20
3 a 1 21 30
4 b 1 0 13
5 b 1 14 32
6 a 2 5 22
7 a 2 0 4
8 b 2 0 18
进而d2
Criteria Order Final
1 a 1 13
2 b 2 12
3 a 1 8
4 a 2 2
d1
我想知道是否有任何方法可以在when d2$Final
is withind1$Low
和d1$High
Criteria 和 Order 匹配时添加额外的列。我期望获得的是这样的:
Criteria Order Low High Final
1 a 1 0 10 8
2 a 1 11 20 13
3 a 1 21 30 NA
4 b 1 0 13 NA
5 b 1 14 32 NA
6 a 2 5 22 NA
7 a 2 0 4 2
8 b 2 0 18 12
甚至在 Final 列中的真或假数字输出 1/0 也可以。
提前致谢
解决方案
这使用 SQL 创建一个复杂的连接。[...] 的需要Order
是为了将它与同名的关键字区分开来。
library(sqldf)
sqldf("select d1.*, d2.Final
from d1
left join d2 on d1.Criteria = d2.Criteria and
d1.[Order] = d2.[Order] and
d2.Final between d1.Low and d1.High")
给出问题中显示的相同输出:
Criteria Order Low High Final
1 a 1 0 10 8
2 a 1 11 20 13
3 a 1 21 30 NA
4 b 1 0 13 NA
5 b 1 14 32 NA
6 a 2 5 22 NA
7 a 2 0 4 2
8 b 2 0 18 12
笔记
可重现形式的数据:
Lines1 <- "
Criteria Order Low High
1 a 1 0 10
2 a 1 11 20
3 a 1 21 30
4 b 1 0 13
5 b 1 14 32
6 a 2 5 22
7 a 2 0 4
8 b 2 0 18"
Lines2 <- "
Criteria Order Final
1 a 1 13
2 b 2 12
3 a 1 8
4 a 2 2"
d1 <- read.table(text = Lines1)
d2 <- read.table(text = Lines2)
推荐阅读
- java - 单例模式执行排序问题
- debugging - Flutter 应用程序不会在 VScode 中调试
- html - 如何设置点的颜色(lineTo)
- android - Android Studio 使用旧版本的 gradle 库
- javascript - 滚动页面时,圆形鼠标跟随正在移动
- linux - systemd 服务 - celery.platforms.LockFailed:[Errno 2] 没有这样的文件或目录:'/var/run/celery/worker1.pid'
- javascript - 根据条件从 JSON 读取管道值 - Angular
- regex - REGEXMATCH 如果没有则计数为零
- python - 使用 python 3 和 Gmail API 发送带有附件的电子邮件,我最终得到损坏的文件或 ConnectionAbortedError
- date - Mule 4 表达式在 url 中传递日期时间