基于近似匹配的向量中的位置

ECI*_*CII 5 r

我有排序的矢量

m<-c(1.1, 3.2, 3.6, 4, 4.6, 4.6, 5.6, 5.7, 6.2, 8.9)
Run Code Online (Sandbox Code Playgroud)

我想基于近似匹配找到值的位置.如果向量中不存在该值,则我想要前一个值的位置

我将使用完全匹配

> match(4,m)
[1] 4
Run Code Online (Sandbox Code Playgroud)

但如果我这样做

> match(6,m)
[1] NA
Run Code Online (Sandbox Code Playgroud)

我想在这个例子中得到的是8(不变的前一个值6的位置,即5.7的位置,即8)

先感谢您

Tom*_*mmy 10

有一个内置函数可以精确地执行您想要的操作:findInterval ...它也是矢量化的,因此您可以为其提供多个值,以便一次性查找,效率更高.

m <- c(1.1, 3.2, 3.6, 4, 4.6, 4.6, 5.6, 5.7, 6.2, 8.9)
# Find nearest (lower) index for both 4 and 6
findInterval(c(4,6), m) 
# [1] 4 8
Run Code Online (Sandbox Code Playgroud)


And*_*rie 3

与向量取子集结合使用which.max,得到17个字符的解:

which.max(m[m<=6]) # Edited to specify <=
[1] 8
Run Code Online (Sandbox Code Playgroud)

由于您的向量已排序,您可以使用更短的:

sum(m<=6) # Edited to specify <=
[1] 8
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为该值TRUE在中隐式转换为 1sum