根据通用变量和最小距离合并数据帧

时间:2018-11-12 12:01:02

标签: r dplyr

我有2个数据集V =

id A B X
1 a b 10
2 a b 9
3 b c 8
4 b d 17

W =

ud A B Y
11 a b 11
12 a b 7
13 b c 8
14 b d 21

,我想将它们合并。使用dplyr的联接函数,代码是

merge = V %>% inner_join(W, by = c("A", "B"))

结果是

 id    ud A     B         X     Y
 1     11 a     b      10.0  11.0 
 1     12 a     b      10.0   7.00
 2     11 a     b      9.00  11.0 
 2     12 a     b      9.00   7.00
 3     13 b     c      8.00   8.00
 4     14 b     d     17.0   21.0 

由于内部联接,返回了匹配项的组合。但是,我想要两个标识符变量idud之间的(唯一)对应关系(此处不是这种情况,因为例如1映射到11 AND 12)。 我想通过使用某个距离函数(例如id)将ud分配给d(X,Y)最小的d(x,y) = abs(x-y)来创建这种唯一的对应关系。

但是我该怎么做?

1 个答案:

答案 0 :(得分:1)

像下面这样吗?

V %>% inner_join(W, by = c("A", "B")) %>% group_by(id) %>% slice(which.min(abs(X - Y)))

输出:

     id A     B         X    ud     Y
  <int> <chr> <chr> <int> <int> <int>
1     1 a     b        10    11    11
2     2 a     b         9    11    11
3     3 b     c         8    13     8
4     4 b     d        17    14    21