[R] Matching a pattern of vector of character strings in another vector of character strings

Liviu Andronic landronimirc at gmail.com
Fri Dec 17 14:58:56 CET 2010


On Fri, Dec 17, 2010 at 2:34 PM, Jing Liu <quiet_jing0920 at hotmail.com> wrote:
>> M<- matrix(c("0","0","1","1","0","1","1","0","0","*","1","1","0","1","*"),nrow=3)
>> colnames(M)<- c("2006","2007","2008","2009","2010")
>> M
>     2006 2007 2008 2009 2010
> [1,] "0"  "1"  "1"  "*"  "0"
> [2,] "0"  "0"  "0"  "1"  "1"
> [3,] "1"  "1"  "0"  "1"  "*"
>
>> pattern<- c("0","1")
>
> I would like to find, for each row, if it contains exactly the pattern of two character strings, beginning with a "0" and followed by a "1", i.e, exactly "0" "1". If it does, at which year?
> E.g. It should return 2006 for row 1, 2008 for row 2 and 2008 for row 3.
>
I could only think of this
> apply(M, 1, function(z) grep('01', paste(z, collapse='')))
[1] 1 1 1
> apply(M, 1, function(z) grepl('01', paste(z, collapse='')))
[1] TRUE TRUE TRUE

But it doesn't return the position of the matched string. So this
isn't what you wanted.

Regards
Liviu


> For as far as I know, the variations of the grep function group cannot search for a pattern that has 2 or more character strings. I could do it with a loop but I seek a more efficient way than a loop. How should I do it? Really appreciated for your help!!!
>
> Best regards,
> Jing Liu
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



-- 
Do you know how to read?
http://www.alienetworks.com/srtest.cfm
http://goodies.xfce.org/projects/applications/xfce4-dict#speed-reader
Do you know how to write?
http://garbl.home.comcast.net/~garbl/stylemanual/e.htm#e-mail



More information about the R-help mailing list