Finding the index inside a vector satisfying a condition

前端 未结 3 1273
孤城傲影
孤城傲影 2020-12-01 12:01

I am looking for a condition which will return the index of a vector satisfying a condition.

For example- I have a vector b = c(0.1, 0.2, 0.7, 0.9) I wa

相关标签:
3条回答
  • 2020-12-01 12:36

    Use which and take the first element of the result:

    which(b > 0.65)[1]
    #[1] 3
    
    0 讨论(0)
  • 2020-12-01 12:39

    You may use which.max:

    which.max(b > 0.65)
    # [1] 3
    

    From ?which.max: "For a logical vector x, [...] which.max(x) return[s] the index of the first [...] TRUE

    b > 0.65
    # [1] FALSE FALSE  TRUE  TRUE
    

    You should also have a look at the result of your code subset(b, b > 0.65) to see why it can't give you the desired result.

    0 讨论(0)
  • 2020-12-01 12:45

    Be careful, which.max is wrong if the condition is never met, it does not return NA:

    > a <- c(1, 2, 3, 2, 5)
    > a >= 6
    [1] FALSE FALSE FALSE FALSE FALSE
    > which(a >= 6)[1]
    [1] NA  # desirable
    > which.max(a >= 6)
    [1] 1   # not desirable
    

    Why? When all elements are equal, which.max returns 1:

    > b <- c(2, 2, 2, 2, 2)
    > which.max(b)
    [1] 1
    

    Note: FALSE < TRUE

    0 讨论(0)
提交回复
热议问题