[R] matching a sequence in a vector?

Berend Hasselman bhh at xs4all.nl
Wed Feb 15 10:26:44 CET 2012


On 15-02-2012, at 05:17, Redding, Matthew wrote:

> Hi All,
> 
> 
> I've been trawling through the documentation and listserv archives on this topic -- but
> as yet have not found a solution.  I'm sure this is pretty simple with R, but I cannot work out how without
> resorting to ugly nested loops.
> 
> As far as I can tell, grep, match, and %in% are not the correct tools.
> 
> Question:
> given these vectors --
> patrn <- c(1,2,3,4)
> exmpl <- c(3,3,4,2,3,1,2,3,4,8,8,23,1,2,3,4,4,34,4,3,2,1,1,2,3,4)
> 
> how do I get the desired answer by finding the occurence of the pattern and returning the starting indices:
> 6, 13, 23
> 

patrn.rev <- rev(patrn)
w <- embed(exmpl,length(patrn))
w.pos <- apply(w,1,function(r) all(r == patrn.rev))
which(w.pos)

You can substitute the last three lines to get a oneliner.

Berend



More information about the R-help mailing list