我有两个数据集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
由于内部联接,匹配的组合被返回。然而,我想要两个标识符变量id
和ud
之间的(唯一的(对应关系(这里不是这样,因为例如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