R 基于两个或多个变量的唯一且详尽的组合寻找最小值

R 基于两个或多个变量的唯一且详尽的组合寻找最小值,r,matching,R,Matching,我试图根据两个变量的唯一组合来确定最小值 id.x id.y dist 7 1 4294.25 7 2 2405.00 7 3 4868.00 12 3 3593.00 13 2 4868.00 13 6 5058.00 我已经知道使用data.tables包的代码,它可以帮助根据一个id变量找到最小值 matchedDT <- DT[ ,.SD[which.min(

我试图根据两个变量的唯一组合来确定最小值

id.x  id.y    dist
7     1       4294.25
7     2       2405.00
7     3       4868.00
12    3       3593.00
13    2       4868.00
13    6       5058.00
我已经知道使用data.tables包的代码,它可以帮助根据一个id变量找到最小值

matchedDT <- DT[ ,.SD[which.min(dist)], by = id.x]
我想得到的是,如果id.y的值在一对中被唯一地消耗为最小值,那么该值不应该在另一对中可用。所需输出将为-

id.x  id.y    dist
7     2       2405.00
12    3       3593.00
13    6       5058.00

作为背景,我试图找到id.x和id.y对应的数据点之间的最小欧几里德距离,我想找到id.x和id.y之间的最小距离。

我不确定是否完全理解OP的要求,但以下代码返回给定输入数据的预期结果:

DT[, .SD[which.min(dist)], by = id.y][, .SD[which.min(dist)], by = id.x]
#   id.x id.y dist
#1:    7    2 2405
#2:   12    3 3593
#3:   13    6 5058
它首先查找每个
id.y
具有最小距离的行:

DT[, .SD[which.min(dist)], by = id.y]
#   id.y id.x    dist
#1:    1    7 4294.25
#2:    2    7 2405.00
#3:    3   12 3593.00
#4:    6   13 5058.00
其中包含
id.x
的副本。在第二步中,检索每个
id.x
的最小距离行


对于这个小样本数据集,这可能是偶然的,需要使用生产数据进行验证。

我不确定是否完全理解OP的要求,但以下代码返回给定输入数据的预期结果:

DT[, .SD[which.min(dist)], by = id.y][, .SD[which.min(dist)], by = id.x]
#   id.x id.y dist
#1:    7    2 2405
#2:   12    3 3593
#3:   13    6 5058
它首先查找每个
id.y
具有最小距离的行:

DT[, .SD[which.min(dist)], by = id.y]
#   id.y id.x    dist
#1:    1    7 4294.25
#2:    2    7 2405.00
#3:    3   12 3593.00
#4:    6   13 5058.00
其中包含
id.x
的副本。在第二步中,检索每个
id.x
的最小距离行

对于这个小样本数据集,这可能是偶然的,需要使用生产数据进行验证。

我认为您可以使用带有
upper=FALSE的
pairwise\u dist()
。我认为您可以使用带有
upper=FALSE的
pairwise\u dist()