2013-03-24 66 views
0

這是問題的擴展,我在這裏問: Getting Factor Means into the dataset after calculation規模 - 復位值誤差

現在,我基本上已經標準化的一切,我很感興趣,使用 我的統計資料想要搜索與這些相交的人的數據集。因此,我正在尋找這樣的數據集:

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

尋找有三個的那些東西真的球員,但是當我運行這個它重置縮放K.AB值要麼3.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)),] 

謝謝!

+0

您提供的示例數據幾乎沒用 - 什麼是base3?你有'confName'和'Conf',並且沒有'Scaled'任何東西。請重現這一點。 – 2013-03-24 00:14:53

+0

最終的函數不會對這些數據做任何事情,但假設你是否有一堆,並且值高於平均值2 sds,這是達到它們的最佳方式還是有更好的方法來做到這一點? – BaseballR 2013-03-24 00:39:45

+0

而且我重寫了樣本數據,我很抱歉沒有讓它重現!除了最後一部分之外,這應該都是有效的。 – BaseballR 2013-03-24 00:40:43

回答

0

您可能希望放棄do.call(rbind,by(...))策略以支持直接策略scalescale function has a data.frame`方法。

> 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 

我不認爲它的工作原理太清楚,因爲這裏所提供的測試用例是太小了。

+0

這適用於我在這個問題中所說的內容,但我們正在努力的主要事情是我們正在向會議手段擴展,而不是整體意思。我們正在努力使他們參加的聯盟的某些統計數據規範化。有沒有辦法編輯代碼以實現會議縮放? (會議是因素變量Conf。 – BaseballR 2013-03-24 01:48:16

+0

有沒有辦法將這些寫入現有的數據集?我曾嘗試將它們作爲cbind(d,dd)基本上結合在一起,但是這不會讓我搜索那麼有沒有辦法使用lapply函數計算它,然後將它們附加到正確行中的數據集?就像每個單獨的統計數據一樣,我們仍然可以查看誰具有較高的平均值或OBP等,但無法比較其縮放值這些值連接 – BaseballR 2013-03-27 06:10:21

+0

我不明白爲什麼cbind(d,dd)-ing「不允許你搜索」。「ave」和「scale」都不會重新排序行。 – 2013-03-27 06:18:12