...if that is possible My task is to find the longest streak of continuous days a user participated in a game.
Instead of writing an sql function, I chose to use the R's rle function, to get the longest streaks and then update my db table with the results. The (attached) dataframe is something like this: day user_id 2008/11/01 2001 2008/11/01 2002 2008/11/01 2003 2008/11/01 2004 2008/11/01 2005 2008/11/02 2001 2008/11/02 2005 2008/11/03 2001 2008/11/03 2003 2008/11/03 2004 2008/11/03 2005 2008/11/04 2001 2008/11/04 2003 2008/11/04 2004 2008/11/04 2005 --- R code follows ------------------------------------------------------ # turn it to a contingency table my_table <- table(user_id, day) # get the streaks rle_table <- apply(my_table,1,rle) # verify the longest streak of "1"s for user 2001 # as.vector(tapply(rle_table$'2001'$lengths, rle_table$'2001'$values, max)["1"]) # loop to get the results # initiate results matrix res<-matrix(nrow=dim(my_table)[1], ncol=2) for (i in 1:dim(my_table)[1]) { string <- paste("as.vector(tapply(rle_table$'", rownames(my_table)[i], "'$lengths, rle_table$'", rownames(my_table)[i], "'$values, max)['1'])", sep="") res[i,]<-c(as.integer(rownames(my_table)[i]) , eval(parse(text=string))) } ---------------------------------------------------- --- end of R code Unfortunately this for loop takes too long and I' wondering if there is a way to produce the res matrix using a function from the "apply" family. Thank you in advance -- View this message in context: http://www.nabble.com/Help-me-replace-a-for-loop-with-an-%22apply%22-function-tp25696937p25696937.html Sent from the R help mailing list archive at Nabble.com. ______________________________________________ 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.