2012-07-06 2 views
1

Q 함수 quantcut()을 사용하여 숫자 변수를 quantile에 해당하는 레벨이있는 ​​인수로 다시 코딩하려고합니다. 예를 들어 :quantcut()에서 타이 처리하기

> X 
[1] 6 4 9 6 1 2 5 3 5 7 10 7 2 7 7 5 6 6 3 4 6 4 2 7 6 7 
[27] 4 3 5 3 7 6 8 12 4 4 0 1 7 6 7 4 7 1 1 1 2 3 3 1 1 6 
[53] 5 3 1 1 1 3 3 3 1 1 3 1 1 1 3 3 0 1 3 1 8 5 3 0 0 2 
[79] 1 3 8 0 1 4 1 1 1 1 1 1 3 2 1 4 1 5 5 12 7 2 6 6 2 6 
[105] 0 1 4 1 4 0 7 3 2 1 1 8 5 5 3 0 5 6 2 4 2 2 2 6 4 2 
[131] 2 2 2 6 8 5 1 2 8 3 2 7 4 6 6 6 7 5 1 5 5 6 1 4 4 5 
[157] 6 2 4 7 2 4 10 6 3 5 2 2 6 6 2 4 5 7 4 5 11 6 6 8 2 4 
[183] 4 6 12 16 9 7 14 13 11 5 5 2 2 7 7 6 4 3 4 3 5 4 5 7 9 4 
[209] 3 12 4 4 4 8 7 6 1 3 6 7 5 5 6 9 6 4 7 8 5 6 3 6 4 7 
[235] 3 3 4 7 5 7 5 9 5 8 3 4 3 2 5 2 4 3 8 4 2 2 1 5 3 5 
[261] 8 5 6 4 5 1 1 2 6 2 7 2 4 4 3 3 4 10 5 6 10 2 5 5 0 1 
[287] 6 2 5 4 6 6 9 5 5 6 3 8 1 5 1 8 5 2 5 2 4 2 4 4 

bins=10 
labels = 1:bins 
library(gtools) 
x2 = quantcut(X, q = seq(0, 1, by=1/bins), labels=labels) 

I 오류 얻을 :. 내가 생각 " 은 '나누기'고유하지 않은 (X [! 플래그] cut.default 오류를 TRUE = include.lowest, newquant = 나누기" 이것은 quantiles에 관계가 있기 때문에 있었지만, quantcut에 대한 문서는 함수가 적은 간격을 사용하여 관계를 처리 할 수있는 방법의 예를 구체적으로 보여줍니다.이 오류는 labels 인수를 지정하는지 여부에 관계없이 발생합니다.

편집 : 다음은 변수 X를 입력하는 코드입니다.

X = c(6L, 4L, 9L, 6L, 1L, 2L, 5L, 3L, 5L, 7L, 10L, 7L, 2L, 7L, 7L, 
5L, 6L, 6L, 3L, 4L, 6L, 4L, 2L, 7L, 6L, 7L, 4L, 3L, 5L, 3L, 7L, 
6L, 8L, 12L, 4L, 4L, 0L, 1L, 7L, 6L, 7L, 4L, 7L, 1L, 1L, 1L, 
2L, 3L, 3L, 1L, 1L, 6L, 5L, 3L, 1L, 1L, 1L, 3L, 3L, 3L, 1L, 1L, 
3L, 1L, 1L, 1L, 3L, 3L, 0L, 1L, 3L, 1L, 8L, 5L, 3L, 0L, 0L, 2L, 
1L, 3L, 8L, 0L, 1L, 4L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 2L, 1L, 4L, 
1L, 5L, 5L, 12L, 7L, 2L, 6L, 6L, 2L, 6L, 0L, 1L, 4L, 1L, 4L, 
0L, 7L, 3L, 2L, 1L, 1L, 8L, 5L, 5L, 3L, 0L, 5L, 6L, 2L, 4L, 2L, 
2L, 2L, 6L, 4L, 2L, 2L, 2L, 2L, 6L, 8L, 5L, 1L, 2L, 8L, 3L, 2L, 
7L, 4L, 6L, 6L, 6L, 7L, 5L, 1L, 5L, 5L, 6L, 1L, 4L, 4L, 5L, 6L, 
2L, 4L, 7L, 2L, 4L, 10L, 6L, 3L, 5L, 2L, 2L, 6L, 6L, 2L, 4L, 
5L, 7L, 4L, 5L, 11L, 6L, 6L, 8L, 2L, 4L, 4L, 6L, 12L, 16L, 9L, 
7L, 14L, 13L, 11L, 5L, 5L, 2L, 2L, 7L, 7L, 6L, 4L, 3L, 4L, 3L, 
5L, 4L, 5L, 7L, 9L, 4L, 3L, 12L, 4L, 4L, 4L, 8L, 7L, 6L, 1L, 
3L, 6L, 7L, 5L, 5L, 6L, 9L, 6L, 4L, 7L, 8L, 5L, 6L, 3L, 6L, 4L, 
7L, 3L, 3L, 4L, 7L, 5L, 7L, 5L, 9L, 5L, 8L, 3L, 4L, 3L, 2L, 5L, 
2L, 4L, 3L, 8L, 4L, 2L, 2L, 1L, 5L, 3L, 5L, 8L, 5L, 6L, 4L, 5L, 
1L, 1L, 2L, 6L, 2L, 7L, 2L, 4L, 4L, 3L, 3L, 4L, 10L, 5L, 6L, 
10L, 2L, 5L, 5L, 0L, 1L, 6L, 2L, 5L, 4L, 6L, 6L, 9L, 5L, 5L, 
6L, 3L, 8L, 1L, 5L, 1L, 8L, 5L, 2L, 5L, 2L, 4L, 2L, 4L, 4L) 

답변

2

좋아, 문제는 여기까지 추적 할 수 있습니다. 여기서 말하는 70 % 및 80 % 분위수는 같습니다. quantile 내가 quantcut 자체를 사용하여이 문제를 해결하는 방법을 볼 수 없습니다 quantcut

quantile(X,probs=seq(0,1,0.1)) 
    0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 
0.0 1.0 2.0 3.0 3.6 4.0 5.0 6.0 6.0 8.0 16.0 

에 의해 내부적으로 사용됩니다,하지만 당신은 언제나 그것을 밖으로 정렬 조합 cutquantileunique를 사용할 수 있습니다. 내가 말할 수있는 것에서 이것은 어쨌든 넥타이가있을 때 quantcut가 내부적으로하는 것입니다.

result <- cut(X,unique(quantile(X,probs=seq(0,1,0.1))),include.lowest=TRUE) 

> result[2:10] 
[1] (3.6,4] (8,16] (5,6] [0,1] (1,2] (4,5] (2,3] (4,5] (6,8] 
#Levels: [0,1] (1,2] (2,3] (3,3.6] (3.6,4] (4,5] (5,6] (6,8] (8,16] 
> X[2:10] 
[1]  4  9  6  1  2  5  3  5  7 
+0

감사합니다. 나는 이것으로 놀았고, 레벨 8 또는 9보다 생략 된 레벨 4 인 이유를 이해하지 못한다 (레벨이 묶여있는 퀀 타이 트를 나타내므로). 레벨 (결과)을 호출하면 1 : 9가 표시됩니다. 그러나 테이블 (결과)을 호출하면 레벨 4에 대한 관찰이 0 회가됩니다. –

+1

@ half-pass - 이것은 quantile 그룹이 정수가 아닌 '> 3에서 3.6'이기 때문에 발생한다고 생각합니다. 으로. 'cut' 함수의 중단 점을'floor '시켜서 그 값을 그룹화 할 필요가 있습니다 :'result <- cut (X, unique (floor quantile (X, probs = seq (0,1, 0.1))))), include.lowest = TRUE)' – thelatemail

+0

의미가 있습니다. 감사합니다. –

관련 문제