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
Use which
and take the first element of the result:
which(b > 0.65)[1]
#[1] 3
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.
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