【发布时间】:2014-07-25 03:46:47
【问题描述】:
对于以下简化的数据框,我计算了每个州、每个测试中每个学校的排名。问题是我的排名是连续的,我想随着学校-州-测试组的每次变化而重置它。
School<-rep(c("A","B","C","D"),each=10)
State<-rep(c("NY","NJ"),times=20)
Test<-rep(c("LSAT", "MCAT", "GRE","TOEFL","ACT"), times=8)
Grade<-trunc(rep((seq(from=500, to=600,length.out=4))))
dat<-data.frame(Test,State,School,Grade)
当我添加这个排名逻辑时,
dat$rank <- NA
dat$rank[order(dat$Test,dat$State,dat$Grade)] <- 1:nrow(dat)
dat[order(dat$rank),]
View(dat[order(dat$rank),])
我输出的前 20 行如下所示:
Test State School Grade rank
10 ACT NJ A 533 1
30 ACT NJ C 533 2
20 ACT NJ B 600 3
40 ACT NJ D 600 4
5 ACT NY A 500 5
25 ACT NY C 500 6
15 ACT NY B 566 7
35 ACT NY D 566 8
18 GRE NJ B 533 9
38 GRE NJ D 533 10
8 GRE NJ A 600 11
28 GRE NJ C 600 12
13 GRE NY B 500 13
33 GRE NY D 500 14
3 GRE NY A 566 15
23 GRE NY C 566 16
6 LSAT NJ A 533 17
26 LSAT NJ C 533 18
16 LSAT NJ B 600 19
36 LSAT NJ D 600 20
我希望它们看起来像这样。请注意,决胜局是学校。如果学校 A 和学校 C 在新泽西州的 ACT 成绩均为 533,则学校 A 将根据 alpha 顺序排在第一位。分数越低排名越低是可以的。
Test State School Grade rank
10 ACT NJ A 533 1
30 ACT NJ C 533 2
20 ACT NJ B 600 3
40 ACT NJ D 600 4
5 ACT NY A 500 1
25 ACT NY C 500 2
15 ACT NY B 566 3
35 ACT NY D 566 4
18 GRE NJ B 533 1
38 GRE NJ D 533 2
8 GRE NJ A 600 3
28 GRE NJ C 600 4
13 GRE NY B 500 1
33 GRE NY D 500 2
3 GRE NY A 566 3
23 GRE NY C 566 4
6 LSAT NJ A 533 1
26 LSAT NJ C 533 2
16 LSAT NJ B 600 3
36 LSAT NJ D 600 4
如果您能获得有关如何处理此组内排名问题的指导,我将不胜感激。
【问题讨论】: