找到最近的较小数字

hei*_*heo 5 r numeric vector

有一个带有以下数字的向量

f<-c(1,3,6,8,10,12,19,27)
Run Code Online (Sandbox Code Playgroud)

哪个元素最接近18.因此19将是最接近的元素,但函数需要返回6(这意味着值12),因为向量中的元素总是较小,除非它等于输入.如果输入为19则输出需要为7(索引)...

Joh*_*ohn 12

我认为这个答案很简单:

f <- c(1,3,6,8,10,12,19,27)
x <- 18

# find the value that is closest to x
maxless <- max(f[f <= x])
# find out which value that is
which(f == maxless)
Run Code Online (Sandbox Code Playgroud)


Gre*_*gor 6

如果您的矢量f总是排序,那么您可以这样做sum(f <= x)

f <- c(1,3,6,8,10,12,19,27)

x <- 18
sum(f <= x)
# [1] 6

x <- 19
sum(f <= x)
# [1] 7
Run Code Online (Sandbox Code Playgroud)


use*_*710 4

试试这个(不是完美的解决方案)

x<-c(1,3,6,8,10,12,19,27)
showIndex<-function(x,input){
 abs.diff<-abs(x-input)
 index.value<-unique(ifelse(abs.diff==0,which.min(abs.diff),which.min(abs.diff)-1))
return(index.value)
 }
 showIndex(x,12)
    [1] 6
showIndex(x,19)
[1] 7
Run Code Online (Sandbox Code Playgroud)