首页 > 解决方案 > 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$Finalis withind1$Lowd1$HighCriteria 和 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 也可以。

提前致谢

标签: rdataframecomparison

解决方案


这使用 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)

推荐阅读