[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