从一个向量到另一个向量的索引值最接近

时间:2019-07-24 08:20:20

标签: r search

给出两个排序的向量,如何从一个到另一个获取最接近的值的索引。

例如,给定:

a = 1:20
b = seq(from=1, to=20, by=5)

如何有效获取向量

c = (1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4)

,它为a中的每个值提供小于等于b的最大值的索引。但是,该解决方案需要适用于ab的不可预测(尽管经过排序)的内容,并且在ab大时需要快速。

2 个答案:

答案 0 :(得分:4)

您可以使用findInterval,它在b中构造一个由断点给出的间隔序列,并返回a元素所在的间隔索引(另请参见{{1 }}以获取其他参数,例如间隔边界处的行为)。

?findInterval

答案 1 :(得分:1)

我们可以使用cut

as.integer(cut(a, breaks = unique(c(b-1, Inf)), labels = seq_along(b)))

#[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4
相关问题