個々の会議の平均値と SD に基づいて、使用している変数の正規化値を作成しようとしています。関数を使用して会議手段を見つけました:
confavg=aggregate(base$AVG, by=list(base$confName), FUN=mean)
31 の会議の平均を取得したら、戻って個々のプレーヤーごとにこれらの平均を入力し、会議の平均に基づいて正規化係数を簡単に計算できるようにします。
confavg が会議の平均である大きな ifelse または if ステートメントを作成しようとしました。
ifelse((base$confName=="America East Conference"),confavg[1,2]->base$CAVG,0->base$CAVG)
しかし、何も機能しません。理想的には、すべてのプレイヤーを取り上げて次のように言いたいと思います。
Normalization = (player average - conference average)/conference standard deviation
どうすればいいですか?
編集:
サンプルデータは次のとおりです。
AVG = c(.350,.400,.320,.220,.100,.250,.400,.450)
Conf = c("SEC","ACC","SEC","B12","P12","ACC","B12","P12")
Conf=as.factor(Conf)
sampleconfavg=aggregate(AVG, by=list(Conf), FUN=mean)
sampleconfsd=aggregate(AVG, by=list(Conf), FUN=sd)
したがって、各プレーヤーの平均は、会議の平均/会議の sd になります。
したがって、最初の人の場合は次のようになります。
(.350 - .335) / 0.0212132 = 0.7071069
しかし、データセット内のすべての人に対してそれを行う機能を構築したいと考えています。ありがとうございました!
編集2:
以下の答えは素晴らしいですが、(うまくいけば)最後の問題に直面しています。基本的に、次のような 3 つの変数に対してこのプロセスを実行したいと考えています。
base3=do.call(rbind, by(base3, base3$confName, FUN=function(x) { x$ScaledAVG <- scale(x$AVG); x}))
base3=do.call(rbind, by(base3, base3$confName, FUN=function(x) { x$ScaledOBP <- scale(x$OBP); x}))
base3=do.call(rbind, by(base3, base3$confName, FUN=function(x) { x$ScaledK.AB <- scale(x$K.AB); x}))
これは機能しますが、次のようにデータファイルを検索すると:
base3[((base3$ScaledAVG>2)&(base3$ScaledOBP>2)&(base3$ScaledK.AB<.20)),]
Scaled K.AB 値をリセットし、検索のパラメーターの一部として使用しません。