Carlos Nasher
2013-Nov-11 17:49 UTC
[R] SOLVED: Count number of consecutive zeros by group
Thanks to all of you. All solutions work fine. I'm running S Ellisons version with Williams comment. Perfect for what I'm doing. And sorry for using a name same as a base R function (twice) ;-) Cheers, Carlos 2013/11/1 PIKAL Petr <petr.pikal@precheza.cz>> Hi > > Yes you are right. This gives number of zeroes not max number of > consecutive zeroes. > > Regards > Petr > > > > -----Original Message----- > > From: arun [mailto:smartpink111@yahoo.com] > > Sent: Friday, November 01, 2013 2:17 PM > > To: R help > > Cc: PIKAL Petr; Carlos Nasher > > Subject: Re: [R] Count number of consecutive zeros by group > > > > I think this gives a different result than the one OP asked for: > > > > df1 <- structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, > > 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), x = c(1, 0, 0, 1, 0, > > 0, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0)), .Names = c("ID", > > "x"), row.names = c(NA, -22L), class = "data.frame") > > > > with(df1, sapply(split(x, ID), function(x) sum(x==0))) > > > > with(df1,tapply(x,list(ID),function(y) {rl <- rle(!y); > > max(c(0,rl$lengths[rl$values]))})) > > > > > > A.K. > > > > > > On Friday, November 1, 2013 6:01 AM, PIKAL Petr > > <petr.pikal@precheza.cz> wrote: > > Hi > > > > Another option is sapply/split/sum construction > > > > with(data, sapply(split(x, ID), function(x) sum(x==0))) > > > > Regards > > Petr > > > > > > > -----Original Message----- > > > From: r-help-bounces@r-project.org [mailto:r-help-bounces@r- > > > project.org] On Behalf Of Carlos Nasher > > > Sent: Thursday, October 31, 2013 6:46 PM > > > To: S Ellison > > > Cc: r-help@r-project.org > > > Subject: Re: [R] Count number of consecutive zeros by group > > > > > > If I apply your function to my test data: > > > > > > ID <- c(1,1,1,2,2,3,3,3,3) > > > x <- c(1,0,0,0,0,1,1,0,1) > > > data <- data.frame(ID=ID,x=x) > > > rm(ID,x) > > > > > > f2 <- function(x) { > > > max( rle(x == 0)$lengths ) > > > } > > > with(data, tapply(x, ID, f2)) > > > > > > the result is > > > 1 2 3 > > > 2 2 2 > > > > > > which is not what I'm aiming for. It should be > > > 1 2 3 > > > 2 2 1 > > > > > > I think f2 does not return the max of consecutive zeros, but the max > > > of any consecutve number... Any idea how to fix this? > > > > > > > > > 2013/10/31 S Ellison <S.Ellison@lgcgroup.com> > > > > > > > > > > > > > > > > -----Original Message----- > > > > > So I want to get the max number of consecutive zeros of variable > > x > > > > > for > > > > each > > > > > ID. I found rle() to be helpful for this task; so I did: > > > > > > > > > > FUN <- function(x) { > > > > > rles <- rle(x == 0) > > > > > } > > > > > consec <- lapply(split(df[,2],df[,1]), FUN) > > > > > > > > You're probably better off with tapply and a function that returns > > > > what you want. You're probably also better off with a data frame > > > > name that isn't a function name, so I'll use dfr instead of df... > > > > > > > > dfr<- data.frame(x=rpois(500, 1.5), ID=gl(5,100)) #5 ID groups > > > > numbered 1-5, equal size but that doesn't matter for tapply > > > > > > > > f2 <- function(x) { > > > > max( rle(x == 0)$lengths ) > > > > } > > > > with(dfr, tapply(x, ID, f2)) > > > > > > > > > > > > S Ellison > > > > > > > > > > > > ******************************************************************* > > > > This email and any attachments are confidential. Any > > > > u...{{dropped:24}} > > > > > > ______________________________________________ > > > 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. > >-- ----------------------------------------------------------------- Carlos Nasher Buchenstr. 12 22299 Hamburg tel: +49 (0)40 67952962 mobil: +49 (0)175 9386725 mail: carlos.nasher@gmail.com [[alternative HTML version deleted]]