Skip to content

Newbie: Ranking a data frame, grouped by 2 or more columns

5 messages · Matthew Pettis, Henrique Dallazuanna, Hadley Wickham +1 more

#
Hi,

I'd like to rank obs in a data frame as subset by 2 or more columns...
The example input would look like the following:

====+====+====+====+
x   y   v
--  --  --
a   w   200
a   w   100
b   w   500
b   w   200
b   z   300
b   z   400
====+====+====+====+

And the data frame I want to create is below:
====+====+====+====+
x   y   v   rank
--  --  --  ----
a   w   200    1
a   w   100    2
b   w   500    1
b   w   200    2
b   z   300    2
b   z   400    1
====+====+====+====+

Can someone help me with this?

Thanks,
Matt
#
Try this:

DF
  V1 V2  V3
1  a  w 200
2  a  w 100
3  b  w 500
4  b  w 200
5  b  z 300
6  b  z 400

DF$rank <- unlist(lapply(split(DF$V3, list(DF$V1, DF$V2), drop = T), rank))




On Fri, Sep 26, 2008 at 5:54 PM, Matthew Pettis
<matthew.pettis at gmail.com> wrote:

  
    
#
On Fri, Sep 26, 2008 at 3:54 PM, Matthew Pettis
<matthew.pettis at gmail.com> wrote:
This is easy to do with the (very soon to be released) plyr package:

library(plyr)
ddply(df, .(x, y), transform, rank = rank(v))

You can learn more about it at http://had.co.nz/plyr

Hadley
#
Try this:
V1 V2  V3
1  a  w 200
2  a  w 100
3  b  w 500
4  b  w 200
5  b  z 300
6  b  z 400
V1 V2  V3 rank
1  a  w 200    2
2  a  w 100    1
3  b  w 500    2
4  b  w 200    1
5  b  z 300    1
6  b  z 400    2
On Fri, Sep 26, 2008 at 4:54 PM, Matthew Pettis
<matthew.pettis at gmail.com> wrote:

  
    
#
Thanks!  I think 'ave' was what I was looking for...
On Fri, Sep 26, 2008 at 6:28 PM, jim holtman <jholtman at gmail.com> wrote: