I find ddply() in package plyr handy for this sort of thing:

 library(plyr)
 f <- function(x) x[which.max( x[["score"]] ), ]
    ## x will be a subset of Dat according to ID
 ddply(Dat, "ID", f)

 -Peter Ehlers

On 2010-03-09 11:59, Ista Zahn wrote:
Hi Richard,
There are probably better ways, but here is one approach:

Dat<- read.table(textConnection("ID, year, score
tom, 1995, 88
rick, 1994, 90
mary, 2000, 97
tom, 1998, 60
mary, 1998,100"), header=TRUE, sep=",")

MaxScore<- aggregate(Dat$score, list(Dat$ID), max)
names(MaxScore)<- c("ID", "score")
MaxYear<- merge(Dat, MaxScore)

Best,
Ista


On Tue, Mar 9, 2010 at 1:35 PM, Tan, Richard<r...@panagora.com>  wrote:
Hi, I have a data frame with 3 columns: ID, year and score.  How can I
select for each unique ID, the year that has the max score?  For
example, for data frame

ID, year, score
tom, 1995, 88
rick, 1994, 90
mary, 2000, 97
tom, 1998, 60
mary, 1998,100

I shall have
ID, year, score
tom, 1995, 88
rick, 1994, 90
mary, 1998,100

Thanks,
Richard

        [[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.





--
Peter Ehlers
University of Calgary

______________________________________________
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.

Reply via email to