我想找到向量中值最接近另一个向量的位置(即索引)。例如:
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, ...
答案 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