0

これは、私がここで尋ねた質問の拡張です。 計算後に因子平均をデータセットに取り込む

基本的に、使用することに関心のあるすべての統計を正規化したので、これらと交差する人々のデータセットを検索したいと思います。したがって、私は次のようにデータセットを検索しています。

base3[((base3$ScaledAVG>2)&(base3$ScaledOBP>2)&(base3$ScaledK.AB<.20)),]

これらの3つすべてが当てはまるプレーヤーを探しますが、これを実行すると、スケーリングされたK.AB値が.5、1、または2にリセットされ、そのパラメーターを使用して検索されません。この方法でデータセットを検索することに何か問題がありますか、それとも同じ静脈内のデータセット内の人を見つけるためのより良い方法がありますか?

ここにいくつかのサンプルデータがありますが、私が持っている4000レコードに出かけるときと同じ問題はありません:

AVG = c(.350,.400,.320,.220,.100,.250,.400,.450)
Conf = c("SEC","ACC","SEC","B12","P12","ACC","B12","P12")
OBP = c(.360,.420,.360,.260,.160,.260,.460,.410)
K.AB = c(.11,.10,.09,.25,.20,.19,.05,.09)
Conf=as.factor(Conf)
d<- data.frame(Conf, AVG,OBP,K.AB)
dd <- do.call(rbind, by(d, d$Conf, FUN=function(x) { x$Scaled <- scale(x$AVG); x}))
dd <- do.call(rbind, by(d, d$Conf, FUN=function(x) { x$Scaled <- scale(x$OBP); x}))
dd <- do.call(rbind, by(d, d$Conf, FUN=function(x) { x$Scaled <- scale(x$K.AB); x}))
dd[((dd$ScaledAVG>2)&(dd$ScaledOBP>2)&(dd$ScaledK.AB<.20)),]

ありがとうございました!

4

1 に答える 1

0

ストレート戦略を優先して、do.call(rbind、by(...))戦略を削除することをお勧めしますscale。data.frame`scale function has aメソッド。

> dd <- scale(d[ ,c("AVG", "OBP", "K.AB")])
> dd
             AVG        OBP       K.AB
[1,]  0.33566727  0.2348519 -0.3608439
[2,]  0.76878633  0.8281619 -0.5051815
[3,]  0.07579584  0.2348519 -0.6495191
[4,] -0.79044229 -0.7539981  1.6598820
[5,] -1.82992803 -1.7428481  0.9381942
[6,] -0.53057085 -0.7539981  0.7938566
[7,]  0.76878633  1.2237019 -1.2268693
[8,]  1.20190539  0.7292769 -0.6495191
attr(,"scaled:center")
    AVG     OBP    K.AB 
0.31125 0.33625 0.13500 
attr(,"scaled:scale")
       AVG        OBP       K.AB 
0.11544170 0.10112757 0.06928203 

> d[ dd[, 'AVG'] > 2 & dd[ ,'OBP'] >2 & dd[ ,'K.AB'] < 0.2 , ]
[1] Conf AVG  OBP  K.AB
<0 rows> (or 0-length row.names)

小さなデータセットではスケーリングされた値が2になる可能性はかなり低いため、これらの条件をすべて満たす行がないことはそれほど驚くべきことではありません。

Confのレベル内でスケールを適用するには:

> dd <- lapply(d[ ,c("AVG", "OBP", "K.AB")], function(x) ave(x, d[,"Conf"] , FUN=scale) )
> dd
$AVG
[1]  0.7071068  0.7071068 -0.7071068 -0.7071068 -0.7071068 -0.7071068  0.7071068  0.7071068

$OBP
[1]        NaN  0.7071068        NaN -0.7071068 -0.7071068 -0.7071068  0.7071068  0.7071068

$K.AB
[1]  0.7071068 -0.7071068 -0.7071068  0.7071068  0.7071068  0.7071068 -0.7071068 -0.7071068

> data.frame(dd)
         AVG        OBP       K.AB
1  0.7071068        NaN  0.7071068
2  0.7071068  0.7071068 -0.7071068
3 -0.7071068        NaN -0.7071068
4 -0.7071068 -0.7071068  0.7071068
5 -0.7071068 -0.7071068  0.7071068
6 -0.7071068 -0.7071068  0.7071068
7  0.7071068  0.7071068 -0.7071068
8  0.7071068  0.7071068 -0.7071068

提供されているテストケースが小さすぎるため、ここではうまく機能しないと思います。

于 2013-03-24T01:08:11.923 に答える