2013-03-24 5 views
0

를 재설정 : 내가 I을 사용하여에 관심이 통계의 기본적으로 정규화 된 모든이 이제 Getting Factor Means into the dataset after calculation확장 할 수 -이 내가 여기 묻는 질문의 확장 값 오류

이들과 교차하는 사람들을 위해 데이터 세트를 검색하려고합니다. 따라서이 같은 데이터 세트를 검색하고 : 그 모든 것들을 세 가지 사실이 선수를 찾고

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

을, 그러나 나는이 프로그램을 실행할 때 그것은 스케일 K.AB 값을 다시 설정하려면 다음 중 하나를 0.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'는 아무것도 없습니다. 재현성있게 만드십시오. –

+0

마지막 함수는이 데이터에서 아무 것도하지 않지만 묶음이 있고이 값보다 2SDS 위에있는 값을 가진 것이이 값을 얻는 가장 좋은 방법인지 또는 더 나은 방법이 있는지를 가정 할 때 가설 이설니다. – BaseballR

+0

그리고 샘플 데이터를 다시 작성했습니다. 재현성이 없기 때문에 사과드립니다! 이것은 마지막 부분을 제외하고는 모두 작동해야합니다. – BaseballR

답변

0

스트레이트 scale 전략을 사용하여 do.call (rbind, by (...)) 전략을 삭제할 수 있습니다. scale 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의 스케일링 값이 작은 데이터 세트에서 오히려 가능성이 있기 때문에 이러한 조건을 모두 충족하는 행을 얻을 수 없다는 것을 너무 놀라운 일이 안된다.

는 컨퍼런스의 수준에서 규모를 적용하려면 :

> 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

+0

거기에 기존 데이터 세트에 쓸 수있는 방법이 있습니까? 기본적으로 cbind (d, dd)로 함께 cbinding 시도했지만이 검색 날 수 없습니다. 거기에 방법이 있나요? lapply 함수를 사용하여 계산 한 다음 정확한 행의 데이터 세트에 첨부하십시오. 각 개별 통계와 마찬가지로 우리는 더 높은 평균 또는 OBP 등을 가진 사용자를 볼 수 있지만, 연결된 값. – BaseballR

+0

cbind (d, dd)가 "검색을 허용하지 않습니다"라는 이유를 이해하지 못합니다. 'ave'도'scale '도 행의 순서를 바꾸지 않습니다. –