2012-01-04 4 views
0

이것이 다소 멍청한 질문인데 사과하겠습니다. 그러나 포럼 을보고 내가하려는 일을 검색 할 방법을 찾지 못했습니다. 나는 훈련 세트를 가지고 있는데, 나는 범주 형 변수에 대한 레벨 수를 줄이기위한 방법을 찾으려고 노력하고있다. (아래의 예에서 카테고리는 상태이다.) 상태를 평균 또는 비율로 매핑하고 싶습니다. 내 트레이닝 세트는 데이터 프레임에 입력하면 다음과 같습니다변수를 기반으로 집계 열을 만들려면 R

state class mean 
1  CA  1 0 
2  AZ  1 0 
3  NY  0 0 
4  CA  0 0 
5  NY  0 0 
6  AZ  0 0 
7  AZ  1 0 
8  AZ  0 0 
9  CA  0 0 
10  VA  1 0 

나는 첫 번째 열에 클래스 변수에 따라 (주)의 평균으로 내 데이터 프레임의 세 번째 열을 부탁합니다. 그래서 CA 열의 평균은 평균 열이 상태 열의 대체로 사용될 수 있도록 0.333 ... 이 될 것입니다. R에 명시적인 루프를 작성하지 않고이 작업을 수행하는 좋은 방법이 있습니까?

교육 집합에 포함되지 않은 경우 새로운 수준 (예 : 새 주)을 매핑하는 방법은 무엇입니까? R의 접근법에 대한 링크는 크게 인정 될 것입니다.

답변

2

이것은 실제로 ave 기능이 설계된 것입니다. 그것은 정말 범주별로 기능적 결과를 생성하는 데 사용하지만, 기본 funciton가 평균입니다 수 있습니다 따라서 이름, 즉, ave- (분노) :

dfrm$mean <- with(dfrm, ave(class, state)) #FUN=mean is the default "setting" 
+0

외부 패키지를 사용할 필요가 없기 때문에이 대답을 수락했습니다. 당신은 대답을 바꾸어 주실 수 있겠습니까? 예 : with (dfrm, ave (클래스, 주)) – ak3nat0n

1
library(plyr) 
    join(data,ddply(data,.(state),summarise,mean=mean(class)),by=("state"),type="left") 
+0

난 그냥'ddply'를 사용하는 것이 더 간단 할 수있다 생각하고 'transform' (OP를 정확히 이해했다면). – joran

+0

사실 나는 방금 요약본을 작성했지만 원본 데이터와 다시 대조했습니다. 나는 ddply 진술만으로는 충분하다고 생각하지만, OP는 그것을 원래의 데이터의 일부로 보일 수도 있습니다. – Maiasaura

관련 문제