On Tue, 2006-08-01 at 07:03 -0700, Kartik Pappu wrote: > Hi all, > > I have a matrix with each column containing a large number of integers > (0 and above). in each column beyond a certain row (say row 120 in > column 1, row 134 in column 2, 142 in column 3...) there are only > 0's. I want to find, for each column the row number of the last row > which contains a positive integer beyond which there are 10 or more > 0's. > > so in the following example (single column, but my real data has > multiple columns) how do I get the row number of the last row of x > beyond which there are 10 or more 0's (which in this case is row#100). > > x <- as.matrix(c(rep(seq(1:20),5),rep(0,20))) > > I am still new to R so I was wondering if anyone had a quick fix. > > Thanks > Kartik
Not fully tested, but something like the following: x <- as.matrix(c(rep(seq(1:20),5),rep(0,20))) get.zeros <- function(x) { runs <- rle(x == 0) pos <- max(which(runs$values & runs$lengths >= 10)) sum(runs$lengths[1:(pos - 1)]) } > apply(x, 2, get.zeros) [1] 100 See ?rle for getting information about sequences of values in a vector. HTH, Marc Schwartz ______________________________________________ R-help@stat.math.ethz.ch 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.