2013-12-23 3 views
2

이 질문에 도움을 주시면 감사하겠습니다. 다음 데이터 세트가 있고 주어진 요인 변수의 수준 당 표준화 된 값 (z 분포)을 포함하는 새 변수를 만들고 싶습니다.팩터 수준을 기준으로 변수를 표준화하고 새로운 변수를 만드는 방법

x<-data.frame(gender=c("boy","boy","boy","girl","girl","girl"),values=c(1,2,3,6,7,8)) 
x 
> x  
    gender values 
1 boy  1 
2 boy  2 
3 boy  3 
4 girl  6 
5 girl  7 
6 girl  8 

내 목표 (남자용 및 여자 용), 각 계수 레벨에 대해 개별적으로 계산의 z 값을 포함 하나 개의 새로운 변수를 생성하는 것이다.

그리고 또 다른 질문입니다. 주로 z 값을 사용하여 변수를 만들고 싶습니다. 다른 함수를 적용하고 예를 들어 팩터 수준 당 quantile에서 분포를 계산하려면 비슷한 것이겠습니까?

도움 주셔서 감사합니다.

답변

2

당신은 avetransformscale를 사용할 수 있습니다

> transform(x, z_score=ave(values, gender, FUN=scale)) 
    gender values z_score 
1 boy  1  -1 
2 boy  2  0 
3 boy  3  1 
4 girl  6  -1 
5 girl  7  0 
6 girl  8  1 

aggregate

> aggregate(values ~ gender, scale, data=x) 

유용합니다 그리고 plyr에서 ddply, tapply, data.table를 사용하는 방법은 여러가지가 있습니다. 살펴보기 this post

+1

당신은'with' 내부'transform' 필요하지 않습니다 :

다음은 각 요소의 수준 분위수를 계산하는 방법입니다. –

0

z 점수를 작성하는 방법에 대한 질문은 이미 답변되었습니다.

with(x, tapply(values, gender, FUN = quantile)) 
# $boy 
# 0% 25% 50% 75% 100% 
# 1.0 1.5 2.0 2.5 3.0 
# 
# $girl 
# 0% 25% 50% 75% 100% 
# 6.0 6.5 7.0 7.5 8.0