Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Finding the index inside a vector satisfying a condition

Tags:

r

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

like image 806
user3453272 Avatar asked Mar 26 '14 11:03

user3453272


People also ask

How do you find the index of an array based condition?

Use the findIndex() method to get the index of an array element that matches a condition. The method takes a function and returns the index of the first element in the array, for which the condition is satisfied. If the condition is never met, the findIndex method returns -1 .

Is there an R function for finding the index of an element in a vector?

Use the match() Function to Find the Index of an Element in R. The match() function is very similar to the which() function. It returns a vector with the first index (if the element is at more than one position as in our case) of the element and is considered faster than the which() function.

How do you get the index of an element in a list in Python based on a condition?

In Python to find a position of an element in a list using the index() method and it will search an element in the given list and return its index.


2 Answers

Use which and take the first element of the result:

which(b > 0.65)[1] #[1] 3 
like image 126
Roland Avatar answered Sep 21 '22 16:09

Roland


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

like image 38
Phuoc Avatar answered Sep 19 '22 16:09

Phuoc