2013-03-24 58 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