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.