我有排序的矢量
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)
与向量取子集结合使用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