我有一个数据框,其中包含grade.equivalent
和scaled.score
,都是数字。我想找到scaled.score
所有学生的百分比或高于给定的学生的百分比grade.equivalent
。
例如,给定以下数据框:
df.ex <- data.frame(grade.equivalent=c(2.4,2.7,3.1,2.5,1.4,2.2,2.3,1.7,1.3,2.2),
scaled.score=c(187,277,308,268,236,305,298,246,241,138)
)
我想知道每一个grade.equivalent
分数在 301 分或以上的学生中,有多少学生的分数超过 301 分grade.equivalent
。
为此,我执行了以下操作:
find.percent.basic <- function(cut.ge, data, cut.scaled.score){
df.sub <- subset(data, grade.equivalent >= cut.ge & !is.na(scaled.score))
denom <- nrow(df.sub)
df.sub <- subset(df.sub, scaled.score >= cut.scaled.score)
numer <- nrow(df.sub)
return(numer/denom)
}
grade.equivs <- unique(df.ex$grade.equivalent)
grade.equivs <- grade.equivs[order(grade.equivs)]
just.percs <- sapply(grade.equivs, find.percent.basic, data=df.ex, cut.scaled.score=301)
new.df <- data.frame(grade.equivalent=grade.equivs, perc=just.percs)
我打算将它包装在一个函数中并与 plyr 一起使用。
我的问题是,有没有更好的方法来做到这一点?看起来这可能是 r 的基本功能或我不知道的通用包。
感谢您的任何想法。
编辑澄清上面的代码产生以下结果,这是我正在寻找的:
grade.equivalent perc
1 1.3 0.2000000
2 1.4 0.2222222
3 1.7 0.2500000
4 2.2 0.2857143
5 2.3 0.2000000
6 2.4 0.2500000
7 2.5 0.3333333
8 2.7 0.5000000
9 3.1 1.0000000
根据@DWin 的观察,第二次编辑澄清