On Fri, Dec 17, 2010 at 09:34:57PM +0800, 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.
If the pattern is always c("0","1"), the number of rows is large and the number of years is relatively small, then this may computed also using matrix calculations. For example 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") year <- colnames(M) status <- rep(NA, times=nrow(M)) for (i in seq(length(year) - 1)) { status[M[, i] == "0" & M[, i+1] == "1"] <- year[i] } status # [1] "2006" "2008" "2008" Petr Savicky. ______________________________________________ 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.