[R] data frame select max group by like function

Peter Ehlers ehlers at ucalgary.ca
Tue Mar 9 20:22:30 CET 2010


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<RTan at 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 at 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



More information about the R-help mailing list