Sorry, I meant to put that it didn't work for "GM", not "Toyota".
> DF[DF$Company=="GM",] Company Person Salary rank 1 GM A 7067.905 4 3 GM C 31627.171 8 5 GM E 66200.508 7 7 GM G 91287.592 3 10 GM J 33239.467 6 13 GM M 47854.525 5 14 GM N 76631.067 2 16 GM P 87532.133 1 In this data, person "G" earned 91287, but has rank 3 even though this is the highest salary in this partition. The lowest salary earned is the 7067 by person "A", so this should have rank = 8, but in fact this gives rank = 4. Is that more clear? Thanks, Brigid On Fri, Jun 1, 2012 at 1:48 PM, arun <smartpink...@yahoo.com> wrote: > Hi, > > Couldn't find any problems if I understand what you mean. > > A.K. > > > > > DF <-within(DF,rank<-ave(Salary,Company,FUN=function(x)rev(order(x)))) > > DF > Company Person Salary rank > 1 GM A 7067.905 4 > 2 Ford B 9946.616 3 > 3 GM C 31627.171 8 > 4 Toyota D 51863.426 1 > 5 GM E 66200.508 7 > 6 Toyota F 40683.019 4 > 7 GM G 91287.592 3 > 8 Toyota H 29360.337 2 > 9 Toyota I 45906.573 7 > 10 GM J 33239.467 6 > 11 Ford K 65087.047 2 > 12 Toyota L 25801.678 3 > 13 GM M 47854.525 5 > 14 GM N 76631.067 2 > 15 Toyota O 8424.691 5 > 16 GM P 87532.133 1 > 17 Toyota Q 33907.294 6 > 18 Ford R 83944.035 1 > > DF[DF$Company=="Ford",] > Company Person Salary rank > 2 Ford B 9946.616 3 > 11 Ford K 65087.047 2 > 18 Ford R 83944.035 1 > > DF[DF$Company=="Toyota",] > Company Person Salary rank > 4 Toyota D 51863.426 1 > 6 Toyota F 40683.019 4 > 8 Toyota H 29360.337 2 > 9 Toyota I 45906.573 7 > 12 Toyota L 25801.678 3 > 15 Toyota O 8424.691 5 > 17 Toyota Q 33907.294 6 > > DF[DF$Company=="GM",] > Company Person Salary rank > 1 GM A 7067.905 4 > 3 GM C 31627.171 8 > 5 GM E 66200.508 7 > 7 GM G 91287.592 3 > 10 GM J 33239.467 6 > 13 GM M 47854.525 5 > 14 GM N 76631.067 2 > 16 GM P 87532.133 1 > > > > > ----- Original Message ----- > From: Brigid Mooney <bkmoo...@gmail.com> > To: r-help@r-project.org > Cc: > Sent: Friday, June 1, 2012 11:23 AM > Subject: [R] Add rank column to data frame as in SQL... > > Hopefully this is an easy problem... > > I'm trying to add a partitioned rank column to a data frame where the > rank is calculated separately across a partition by categories, the > way you could easily do in SQL. I found this solution in the archives > that looked like it might work: > > http://tolstoy.newcastle.edu.au/R/e11/help/10/09/8675.html > > The example has a data frame with several car companies, and employee > salaries within them. A column is then added to the data.frame which > should give the descending rank for each employee, partitioned by > company. > > > But when I implemented it, the results weren't the expected rankings. > What am I doing wrong? > > set.seed(1) > DF <- > data.frame(Company=sample(c("Ford","Toyota","GM"),size=18,replace=TRUE), > Person=LETTERS[1:18],Salary=runif(18)*1e5) > DF <- within(DF, rank <- ave(Salary, Company, > FUN=function(x)rev(order(x)))) > > # Then checking each category manually > DF[DF$Company == "Ford",] > DF[DF$Company == "GM",] > DF[DF$Company == "Toyota",] > > # My results show that it works for Ford and GM, but not Toyota > > DF[DF$Company == "Ford",] > Company Person Salary rank > 1 Ford A 38003.52 4 > 5 Ford E 65167.38 2 > 10 Ford J 38238.80 3 > 11 Ford K 86969.08 1 > 12 Ford L 34034.90 5 > > DF[DF$Company == "GM",] > Company Person Salary rank > 4 GM D 21214.25 6 > 6 GM F 12555.51 7 > 7 GM G 26722.07 5 > 13 GM M 48208.01 4 > 15 GM O 49354.13 3 > 17 GM Q 82737.33 1 > 18 GM R 66846.67 2 > > DF[DF$Company == "Toyota",] > Company Person Salary rank > 2 Toyota B 77744.522 2 > 3 Toyota C 93470.523 1 > 8 Toyota H 38611.409 5 > 9 Toyota I 1339.033 3 > 14 Toyota N 59956.583 6 > 16 Toyota P 18621.760 4 > > > For reference, I'm using R 2.11.1 on a Windows 7 machine. > > Can anyone provide insight into how I am implementing this > incorrectly, or give an alternate way to add such a partitioned rank > column to a data frame? > > Thanks in advance, > Brigid > > ______________________________________________ > 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. > > [[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.