Finding the index inside a vector satisfying a condition

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 want to know the first index of b for which say b >0.65. In this case the answer should be 3

I tried which.min(subset(b, b > 0.65)) But this gives me 1 instead of 3.

Please help


Solution 1:

Use which and take the first element of the result:

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

Solution 2:

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