[R] Read 2 rows in 1 dataframe for diff - longitudinal data

arun smartpink111 at yahoo.com
Tue Jun 4 04:10:25 CEST 2013


Hi,
May be this helps:
res1<-df1[with(df1,unlist(tapply(var,list(subid),FUN=function(x) c(FALSE,diff(x)!=0)),use.names=FALSE)),]
 res1
#   subid year var
#3     36 2003   3
#7     47 2001   3
#9     47 2005   1
#10    47 2007   3
#or
library(plyr)
 subset(ddply(df1,.(subid),mutate,delta=c(FALSE,diff(var)!=0)),delta)[,-4]
#   subid year var
#3     36 2003   3
#7     47 2001   3
#9     47 2005   1
#10    47 2007   3
A.K.



I need to output a dataframe whenever var changes a value. 

df1 <- data.frame(subid=rep(c(36,47),each=5),year=rep(seq(1999,2007,2),2),var=c(1,1,3,3,3,1,3,3,1,3)) 
   subid year var 
1     36 1999   1 
2     36 2001   1 
3     36 2003   3 
4     36 2005   3 
5     36 2007   3 
6     47 1999   1 
7     47 2001   3 
8     47 2003   3 
9     47 2005   1 
10    47 2007   3 
> 

I need: 
36 2003   3 
47 2001   3 
47 2005   1 
47 2007   3 

I am trying to use ddply over subid and use the diff function, but it is not working quiet right. 

> dd <- ddply(df1,.(subid),summarize,delta=diff(var) != 0) 
> dd 
  subid delta 
1    36 FALSE 
2    36  TRUE 
3    36 FALSE 
4    36 FALSE 
5    47  TRUE 
6    47 FALSE 
7    47  TRUE 
8    47  TRUE 

I would appreciate any help on this. 
Thank You! 
-ST



More information about the R-help mailing list