Find nearest smaller number

前端 未结 7 1173
粉色の甜心
粉色の甜心 2021-01-18 12:35

I have a vector of numbers

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

I want to compare the values in the vector to another number, and find the c

相关标签:
7条回答
  • 2021-01-18 12:38

    In a functional programming style:

    f <- c(1, 3, 6, 8, 10, 12, 19, 27)
    x <- 18
    Position(function(fi) fi <= x, f, right = TRUE)
    
    0 讨论(0)
  • 2021-01-18 12:39

    I think this answer is pretty straightforward:

    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)
    
    0 讨论(0)
  • 2021-01-18 12:43

    If your vector f is always sorted, then you can do 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
    
    0 讨论(0)
  • 2021-01-18 12:55

    There is findInterval:

    findInterval(18:19, f)
    #[1] 6 7
    

    And building a more concrete function:

    ff = function(x, table)
    {
        ot = order(table)
        ans = findInterval(x, table[ot]) 
        ot[ifelse(ans == 0, NA, ans)]
    }
    
    set.seed(007); sf = sample(f)
    sf
    #[1] 27  6  1 12 10 19  8  3
    ff(c(0, 1, 18, 19, 28), sf)
    #[1] NA  3  4  6  1
    
    0 讨论(0)
  • 2021-01-18 12:57

    You could try:

    x <- 18
    f <- c(1,3,6,8,10,12,19,27)
    
    ifelse(x %in% f, which(f %in% x), which.min(abs(f - x)) - 1)
    

    That way if x is not in f, it will return the nearest previous index. If x is in f, it will return x index.

    0 讨论(0)
  • 2021-01-18 12:59

    Try this (not a perfect solution)

    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
    
    0 讨论(0)
提交回复
热议问题