我试图根据两个变量的唯一组合来确定最小值。
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之间的最小距离。
答案 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
的最小距离行。
对于这个小样本数据集,这可能只是偶然的,需要使用生产数据进行验证。