Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there an R function to find the index of regexp matches in a character vector?

Tags:

regex

r

match

I'm looking for an R function that works like match only for regular expression matching instead of equality. In other words, if I have a variable r that is a character vector of regular expressions and a variable x which is a character vector, I want the function to return a numeric vector the same length as r that gives, for each regular expression, the index of the first element that matches that regular expression. Note that I don't want the position within the string where the regular expression matches. I want the index of the element that matches each regular expression.

like image 864
Ryan C. Thompson Avatar asked Jan 27 '14 22:01

Ryan C. Thompson


1 Answers

You're just looking for grep:

x <- c("arm","foot","lefroo", "bafoobar")
r <- c("ar","^ba","$m","foo")

Get the first regex match index:

sapply(r, function(y) grep(y,x)[1])

 ar ^ba  $m foo 
  1   4  NA   2 

Get all regex match indexes:

sapply(r, function(y) grep(y,x))

$ar
[1] 1 4 # returns matches of ar in x

$`^ba`
[1] 4

$`$m`
integer(0)

$foo
[1] 2 4
like image 79
Brandon Bertelsen Avatar answered Nov 27 '22 09:11

Brandon Bertelsen