HI, Try: dat2[,Time1:=c(0,diff(Time)),by=ID] dat2[,CumSTime1:=cumsum(Time1),by=ID]
head(dat2,4) # ID Time Time1 CumSTime1 #1: 1 3 0 0 #2: 1 6 3 3 #3: 1 7 1 4 #4: 1 10 3 7 A.K. ----- Original Message ----- From: bibek sharma <mbhpat...@gmail.com> To: arun <smartpink...@yahoo.com> Cc: Sent: Friday, December 14, 2012 12:56 PM Subject: Re: [R] Hello R User Hi Arun, Great! Once we get, time1, I again wanna add time to its previous value for example, wanna get 0,3 4 etc... can I have suggestion? On Fri, Dec 14, 2012 at 9:42 AM, arun <smartpink...@yahoo.com> wrote: > Hi, > > You could also use library(data.table) to do this faster. > dat1<-read.table(text=" > ID Time > 1 3 > 1 6 > 1 7 > 1 10 > 1 16 > 2 12 > 2 18 > 2 19 > 2 25 > 2 28 > 2 30 > ",sep="",header=TRUE) > library(data.table) > dat2<-data.table(dat1) > res<-dat2[,Time1:=c(0,diff(Time)),by=ID] > head(res,3) > # ID Time Time1 > #1: 1 3 0 > #2: 1 6 3 > #3: 1 7 1 > > #Comparing different approaches: > set.seed(55) > dat3<- > data.frame(ID=rep(1:1000,each=500),Value=sample(1:800,5e5,replace=TRUE)) > dat4<-data.table(dat3) > system.time(dat3$Value1<-ave(dat3$Value,dat3$ID,FUN=function(x) c(0,diff(x)))) > # user system elapsed > # 0.312 0.000 0.313 > > ids<-unique(dat3$ID) > system.time({ > for(id in ids){ > dat3$Value[dat3$ID==id]<-c(0,diff(dat3$Value[dat3$ID==id])) > } }) > # user system elapsed > # 36.938 0.868 37.873 > > system.time(dat5<-dat4[,Value1:=c(0,diff(Value)),by=ID]) > # user system elapsed > # 0.036 0.000 0.037 > head(dat5) > # ID Value Value1 > #1: 1 439 0 > #2: 1 175 -264 > #3: 1 28 -147 > #4: 1 634 606 > #5: 1 449 -185 > #6: 1 60 -389 > head(dat3) > # ID Value Value1 > #1 1 0 0 > #2 1 -264 -264 > #3 1 -147 -147 > #4 1 606 606 > #5 1 -185 -185 > #6 1 -389 -389 > > A.K. > > > > > > > > > > > > > ----- Original Message ----- > From: bibek sharma <mbhpat...@gmail.com> > To: R help <r-help@r-project.org> > Cc: > Sent: Friday, December 14, 2012 10:51 AM > Subject: [R] Hello R User > > Hello R User, > In the sample data given below, time is recorded for each id > subsequently. For the analysis, for each id, I would like to set 1st > recorded time to zero and thereafter find the difference from previous > time. I.e. for ID==1, I would like to see Time=0,3,1,3,6. This needs > to be implemented to big data set. > Any suggestions are much appreciated! > Thanks, > Bibek > > ID Time > 1 3 > 1 6 > 1 7 > 1 10 > 1 16 > 2 12 > 2 18 > 2 19 > 2 25 > 2 28 > 2 30 > > ______________________________________________ > 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.