给出两个排序的向量,如何从一个到另一个获取最接近的值的索引。
例如,给定:
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
的最大值的索引。但是,该解决方案需要适用于a
和b
的不可预测(尽管经过排序)的内容,并且在a
和b
大时需要快速。
答案 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