Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find all positions of all matches of one vector of values in second vector

I need to find all positions in my vector corresponding to any of values of another vector:

needles <- c(4, 3, 9)
hay <- c(2, 3, 4, 5, 3, 7)
mymatches(needles, hay) # should give vector: 2 3 5 

Is there any predefined function allowing to do this?

like image 798
Vasily A Avatar asked May 17 '15 01:05

Vasily A


2 Answers

This should work:

which(hay %in% needles) # 2 3 5
like image 58
jalapic Avatar answered Sep 17 '22 08:09

jalapic


R already has the the match() function / %in% operator, which are the same thing, and they're vectorized. Your solution:

which(!is.na(match(hay, needles)))
[1] 2 3 5

or the shorter syntax which(hay %in% needles) as @jalapic showed.

With match(), if you wanted to, you could see which specific value was matched at each position...

match(hay, needles)
[1] NA  2  1 NA  2 NA

or just a logical vector of where the matches occurred:

!is.na(match(hay, needles))
[1] FALSE  TRUE  TRUE FALSE  TRUE FALSE
like image 37
smci Avatar answered Sep 20 '22 08:09

smci