我正在尝试根据个人会议手段和 SD 为我正在使用的变量创建一个标准化值。我发现会议意味着使用该功能:
confavg=aggregate(base$AVG, by=list(base$confName), FUN=mean)
因此,在获得 31 次会议的平均值后,我想返回并为每个单独的球员输入这些平均值,这样我就可以轻松地根据会议平均值计算出标准化因子。
我试图创建大型 ifelse 或 if 语句,其中 confavg 是会议平均值。
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)
所以每个球员都会有他们的平均值 - 会议平均值/会议的标准差
所以对于第一个人来说,这将是:
(.350 - .335) / 0.0212132 = 0.7071069
但我希望为我的数据集中的所有人构建一个函数。谢谢!
编辑2:
好吧,下面的答案很棒,但我(希望)遇到了最后一个问题。我想基本上对三个变量执行此过程,例如:
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 值并且不将其用作搜索参数的一部分。