查找值接近另一个向量元素的向量位置

时间:2018-08-22 18:16:49

标签: arrays r vector

我想找到向量中值最接近另一个向量的位置(即索引)。例如:

v1 <- c(0, 0.25, 0.5, 0.75, 1, 1.25, 1.5)
v2 <- c(0.1, 0.33, 0.98)

我想找到一个包含v1位置的矢量,其值与v2的元素一样近,即:

# Desired output
v3 <- c(1, 2, 5) # since 0.1 is closest to 0, 0.33 is closest to 0.25, ...

1 个答案:

答案 0 :(得分:0)

我找到了自己问题的答案。解决方法如下:

v1 <- c(0, 0.25, 0.5, 0.75, 1, 1.25, 1.5)
v2 <- c(0.1, 0.33, 0.98)

我们将使用功能 findInterval

position <- findInterval(v2, v1) # result: c(1 2 4)

问题是我们需要知道它是否更接近上限或下限。因此,我们创建了一个将每个间隔除以2的新向量,并对向量进行排序:

v1p <- sort(c(v1, v1 - (v1 - shift(v1))/2)) # result:  c(0.000 0.125 0.250 0.375 0.500 0.625 0.750 0.875 1.000 1.125 1.250 1.375 1.500)

# Position in new vector
position_new <- findInterval(v2, v1p)

# Now if position is odd: lower bound, if position number is even: upper bound:
is.even <- function(x) x %% 2 == 0
final_position <- position + is.even(position_new)

print(final_position)
[1] 1 2 5