On Dec 17, 2010, at 8:34 AM, Jing Liu wrote:


Dear all,

My question is illustrated by the following example:

I have a matrix M:

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.

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!!!

You can just paste() each row with collapse="._" and now can use grep- ish functions as you were hoping to use.

> m2 <- apply(M, 1, paste, collapse="_")
> colnames(M)[(regexpr("0_1", m2)+1)/2] # assuming number of characters per element are all 1
[1] "2006" "2008" "2008"

--
David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@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.

Reply via email to