1

grade.equivalent列とscaled.score、両方の数値を持つデータフレームがあります。scaled.scoreeach 以上のすべての学生に対して、与えられた以上の学生の割合を見つけたいと思います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からの観察に従って、明確にするためにもう一度編集しました

4

2 に答える 2

0
 with(df.ex, tapply(scaled.score, INDEX=grade.equivalent, 
                   FUN=function(s) 100*sum(s>301)/length(s) ) )
#1.3 1.4 1.7 2.2 2.3 2.4 2.5 2.7 3.1 
#  0   0   0  50   0   0   0   0 100 
于 2013-06-11T01:18:06.137 に答える