Hi: Does this work?
library(plyr) ddply(tmp, .(trial, Gender), transform, rankscore = rank(score)) score trial Gender rankscore 1 1 1 M 1 2 2 1 M 2 3 3 1 F 1 4 4 1 F 2 5 4 2 M 2 6 3 2 M 1 7 2 2 F 2 8 1 2 F 1 Alternatively, you could get the 'wide form' with aggregate(score ~ trial + Gender, data = tmp, FUN = rank) trial Gender score.1 score.2 1 1 M 1 2 2 2 M 2 1 3 1 F 1 2 4 2 F 2 1 HTH, Dennis On Fri, Apr 29, 2011 at 12:26 PM, Doran, Harold <hdo...@air.org> wrote: > Suppose I have data such as > > tmp <- data.frame(score = c(1,2,3,4, 4,3,2,1), trial = gl(2,4), Gender = > gl(2,2,8, labels=c('M', 'F'))) > > Now I would like to compute a rank on the variable score conditional on trial > and gender. I could do > > res <- with(tmp, tapply(score, list(Gender, trial), rank)) > res[,1] > res[,2] > > and then finagle a way to create a new variable in the dataframe tmp that has > these ranks associated with the correct rows. But, perhaps there is a better > way. Any suggestions? > > [[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.