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