2014-03-12 3 views
0

고용주와 직원이있는 데이터 세트가 있습니다. 각 직원에게는 급여가 할당됩니다. 집계 함수를 사용하여 각 고용주의 총 급여에 대한 단일 포인트 견적을 얻기 위해 고용주가 총 급여를 산정 할 수있었습니다. 이제 각 고용주의 수입 분배를 보여 주며 따라서 백분위 수를 만들고 싶습니다.다른 변수의 레벨을 기반으로 한 퀀 타이즈 생성

이 코드는 전체 데이터에 대한 백분위 수를 생성합니다. 나는 다음과 같이 다시 집계 시도했습니다 각 고용주

pct <- quantile(salary, c(0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1) 

의 백분위를 싶지만, R은이

aggregate (pct, by = list(employer), FUN=length) 

솔직히 말해서, 나도 몰라 좋아하지 않는 것 여기에 할당 할 재미. 방금 길이를 선택했습니다.

감사

나는이 질문에 Quantiles by factor levels in R 에 대한 결과를 읽은하지만 프로그래밍은 나의 이해 넘어 당신은 tapply 기능으로 분위수를 계산할 수

답변

2

:

# Making sample data... 
set.seed(144) 
dat <- data.frame(employer=c(rep("A", 100), rep("B", 100)), 
        salary=rnorm(200)) 

# Compute salary quantiles for each employer 
tapply(dat$salary, dat$employer, quantile, probs=seq(0, 1, .1)) 
# $A 
#   0%   10%   20%   30%   40%   50%   60%   70% 
# -2.41444189 -1.40732877 -1.12317885 -0.64970145 -0.47523453 -0.09430894 0.15215525 0.35878949 
#   80%   90%  100% 
# 0.65762946 1.08900468 2.60805224 
# 
# $B 
#   0%   10%   20%   30%   40%   50%   60%   70% 
# -2.94139814 -1.27564687 -0.95004621 -0.57881100 -0.31022591 -0.14494699 -0.02373928 0.50534378 
#   80%   90%  100% 
# 0.92179302 1.41398773 1.98714112 

으로 출력을 위해 하나의 데이터 프레임에 모든 것을 가져오고, 동일한 인수를 사용할 수 있지만 aggregate 함수는 다음과 같습니다.

aggregate(dat$salary, list(dat$employer), quantile, probs=seq(0, 1, .1)) 
# Group.1  x.0%  x.10%  x.20%  x.30%  x.40%  x.50%  x.60%  x.70% 
# 1  A -2.41444189 -1.40732877 -1.12317885 -0.64970145 -0.47523453 -0.09430894 0.15215525 0.35878949 
# 2  B -2.94139814 -1.27564687 -0.95004621 -0.57881100 -0.31022591 -0.14494699 -0.02373928 0.50534378 
#   x.80%  x.90%  x.100% 
# 1 0.65762946 1.08900468 2.60805224 
# 2 0.92179302 1.41398773 1.98714112 
+0

감사합니다. NaN에 대한 오류 메시지가 나타나지만 문을 추가했습니다. na.rm = TRUE가 끝났으며 현재 작동합니다. – Nottles82

+0

이제 출력을 Excel로 내 보내야합니다. 다음 코드는 작동하지 않습니다 write.table (tapply (dat $ salary, dat $ employer, quantile, probs = seq (0,1,0.1), na.rm = TRUE), file = "example.csv") – Nottles82

+0

'write.table' 코드가 작동하지 않는 이유는'tapply'가리스트를 리턴하지만'write.table'는리스트를 취하지 않기 때문입니다. 'tapply' 호출 후에'$ A' 또는'$ B'를 사용하면'tapply' 출력의 일부를 추출하여 내보낼 수 있습니다. – josliber

관련 문제