Is f() what you want? It wastes some time doing things that don't have to be done but is pretty easy to understand. > input <- c(0, 0, 0, 2, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 0, 2, 0, 0, 2) > out <- c(0, 0, 0, 3, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, + 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 2, 0, 2, 0, 0, 2) > f <- function (x) { firstInRun <- function(x) c(TRUE, x[-1] != x[-length(x)]) group <- cumsum(firstInRun(x == 0)) ave(x, group, FUN = sum) } > all.equal(out, f(input)) [1] TRUE
Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On > Behalf Of mdvaan > Sent: Monday, July 16, 2012 9:18 AM > To: r-help@r-project.org > Subject: [R] Finding and manipulation clusters of numbers in a sequence of > numbers > > Hi, > > I have the following sequence: > in <- c(0, 0, 0, 2, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, > 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 0, 2, 0, 0, 2) > > >From this sequence I would like to get to the following sequence: > out <- c(0, 0, 0, 3, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, > 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 2, 0, 2, 0, 0, 2) > > Basically, what I would like to do for each number greater than 0, is to > add all adjacent numbers and the adjacent numbers of those numbers, etc. > until one of those numbers is equal to 0. > > I could manually repeat the loops below until "sequence" stops changing but > there must be a smarter way. Any suggestions? Thanks! > > sequence <- c(0, 0, 0, 2, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, > 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 0, 2, 0, 0, 2) > for (h in 2:(length(sequence) - 1)) > { > sequence[h] <- ifelse(sequence[h] > 0, sequence[h-1] + sequence[h], 0) > } > > for (h in 1:(length(sequence) - 1)) > { > sequence[h] <- ifelse(sequence[h] > 0 & sequence[h+1] > sequence[h], > sequence[h+1], sequence[h]) > } > > -- > View this message in context: http://r.789695.n4.nabble.com/Finding-and- > manipulation-clusters-of-numbers-in-a-sequence-of-numbers-tp4636661.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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. ______________________________________________ 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.