【发布时间】:2014-09-24 10:30:57
【问题描述】:
我得到了这段代码,它创建了两个向量,对于来自a 的每个元素,我想在b 中获取最接近的元素:
a = rnorm(100)
b = rnorm(100)
c = vapply(a, function(x) which.min(abs(b - x)), 1)
table(duplicated(c))
FALSE TRUE
61 39
如您所见,此方法会提示提供大量重复项,这是正常的,但我希望没有重复项。一旦选择了索引,我就想从b 中删除出现,但我不知道如何在vapply 下执行此操作。
【问题讨论】:
-
所以要清楚,您正在寻找一个排列,
p,这样sum(abs(a-b[p]))被最小化? -
好吧,我想你确实可以这么说
-
我猜
data.table的加入函数roll = "nearest"在这里会很有用,ala stackoverflow.com/questions/15712826/… -
@Chase 这也是我的第一个想法。但我看不出这有助于避免比赛中的重复。他们希望在向量的值之间建立一对一的关系。
-
@Wicelo 请提供可重现的输入和输出,并说明如果
b的每个值只能作为匹配项出现一次,您希望如何确定匹配项。b值是与最接近匹配的第一个a值匹配,还是与最接近b匹配的a值匹配?