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}}

