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

______________________________________________
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.

Reply via email to