我有一个像这样的数据模式/csv (cols:id...score),有超过 90000 行,我需要如图所示的排名 - 首先按年份分组,然后按类(class)分组。任何人都可以帮助解决这个问题,无论是在 MYSQL 还是在 R 中
id Year class name score rank 1 2010 Phy joe 95 2 2 2010 Phy amy 98 1 3 2010 Phy carl 58 3 4 2010 Mat joe 88 3 5 2010 Mat amy 100 1 6 2010 Mat carl 95 2 7 2011 Phy joe 84 1 8 2011 Phy amy 25 3 9 2011 Phy carl 48 2 10 2011 Mat joe 56 2 11 2011 Mat amy 85 1 12 2011 Mat carl 48 3
最佳答案
假设您的数据作为名为 dd
的 data.frame
存储在 R 中,那么您可以按照您定义的方式计算排名
dd$ranks<-with(dd, ave(score, Year, class, FUN=function(x) rank(-x)))
请注意,rank
有多个关系选项,因此您可能需要阅读 ?rank
以了解哪一个适合您。
关于MYSQL 或 R 在多个子组内排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23874552/