我得到了这段代码,该代码创建了两个向量,对于每个元素,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
。
您要获得的最接近的匹配是对向量进行排序,然后将它们配对。下面的排列b
应允许您执行此操作。
p <- order(b)[order(order(a))] # order on b and then back transform the ordering of a
sum(abs(a-b[p]))
[1] 20.76788
显然,允许重复确实使事情变得更加紧密:
sum(abs(a-b[c]))
[1] 2.45583
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句