Hi, Some speed comparisons:
df <- data.frame(TreeID=rep(1:6000,each=20), Age=rep(seq(1,20,1),6000)) df$Height <- exp(-0.1 + 0.2*df$Age) df1<- df df3<-df library(data.table) dt1<- data.table(df) df$HeightGrowth <- NA system.time({ #Rui's 2nd function df2 <- data.matrix(df) for(i in seq_len(nrow(df2))[-1]){ if(df2[i, "TreeID"] == df2[i - 1, "TreeID"]) df2[i, "HeightGrowth"] <- df2[i, "Height"] - df2[i - 1, "Height"] } }) # user system elapsed # 1.108 0.000 1.109 system.time({for (ir in unique(df$TreeID)) { #Don's first function in.ir <- df$TreeID == ir df$HeightGrowth[in.ir] <- c(NA, diff(df$Height[in.ir])) }}) # user system elapsed #100.004 0.704 100.903 system.time({df3$delta <- c(NA,diff(df3$Height)) ##Don's 2nd function df3$delta[df3$delta < 0] <- NA}) #####winner # user system elapsed # 0.016 0.000 0.014 system.time(df1$HeightGrowth <- ave(df1$Height, df1$TreeID, FUN= function(vec) c(NA, diff(vec)))) #David's #user system elapsed # 0.136 0.000 0.137 system.time(dt1[,HeightGrowth:=c(NA,diff(Height)),by=TreeID]) # user system elapsed # 0.076 0.000 0.079 identical(df1,as.data.frame(dt1)) #[1] TRUE identical(df1,df) #[1] TRUE head(df1,2) # TreeID Age Height HeightGrowth #1 1 1 1.105171 NA #2 1 2 1.349859 0.2446879 head(df2,2) # TreeID Age Height HeightGrowth #[1,] 1 1 1.105171 NA #[2,] 1 2 1.349859 0.2446879 A.K. ----- Original Message ----- From: Trevor Walker <trevordaviswal...@gmail.com> To: r-help@r-project.org Cc: Sent: Monday, June 10, 2013 1:28 PM Subject: [R] Speed up or alternative to 'For' loop I have a For loop that is quite slow and am wondering if there is a faster option: df <- data.frame(TreeID=rep(1:500,each=20), Age=rep(seq(1,20,1),500)) df$Height <- exp(-0.1 + 0.2*df$Age) df$HeightGrowth <- NA #intialize with NA for (i in 2:nrow(df)) {if(df$TreeID[i]==df$TreeID[i-1]) {df$HeightGrowth[i] <- df$Height[i]-df$Height[i-1] } } Trevor Walker Email: trevordaviswal...@gmail.com [[alternative HTML version deleted]] ______________________________________________ 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.