r-基于公共变量和最小距离的数据帧合并



我有两个数据集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(。我想通过使用一些距离函数(例如d(x,y) = abs(x-y)(将id分配给ud来创建这种唯一的对应关系,其中d(X,Y)是最小的。

但我该怎么做呢?

下面是什么?

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

最新更新