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.