根据两个或多个变量的唯一和详尽组合查找最小值

时间:2017-05-31 02:20:28

标签: 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(dist)], by = id.x]

此代码的输出不会耗尽id.y变量,我的意思是id.x和id.y之间存在一对多的关系,输出时的dist最小。输出类似于 -

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

我想得到的是,如果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之间的最小距离。

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解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的最小距离行。

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