2016-09-14 7 views
1

N이 (말 2e6)는 Hmisc 패키지의 cut2 함수가 에러를사용 cut2는

y = cut2(rnorm(2000000,0,1),m=sqrt(2000000)) 

Error in if (cj == upper) next : missing value where TRUE/FALSE needed 
In addition: Warning message: 
In (1:g) * nnm : NAs produced by integer overflow 

을 던졌습니다 위해 내가 함께, 내 데이터의 분위수를 얻기 위해 노력하고있어 것 같다 m은 각 분위수를 표시하고 각 분위수의 끝점도 기록합니다. cut2이 작업을 수행하지만 대용량에는 적합하지 않습니다. N. 더 나은 대안이 있습니까?

답변

1

이것이 원하는가요?

cut3 = function(x, m) { 
    p = seq(0, 1, by = m/length(x)) 
    q = quantile(x, probs = p, names = F) 
    result = cut(x, breaks = q) 
} 

테스트를 아웃 :

x = rnorm(2e6) 
m = sqrt(2e6) 
qq = cut3(x, m) 
summary(as.numeric(table(qq))) 
# Min. 1st Qu. Median Mean 3rd Qu. Max. 
# 1414 1414 1414 1414 1414 1415 
head(qq) 
# [1] (0.4757,0.4779] (-1.021,-1.018] (0.4325,0.4344] (1.376,1.381] (-2.156,-2.138] (0.1215,0.1233] 
# 1414 Levels: (-4.964,-3.196] (-3.196,-2.981] (-2.981,-2.86] (-2.86,-2.766] (-2.766,-2.696] (-2.696,-2.637] ... (3.145,3.607] 
+0

내가보기 시작하고있어 일부 약간의 차이가있다. 'cut2'는 각 bin의 관측치의 최소 수를'm'으로하고,'cut3'은 각 bin이 정확히 동일한 수의 관측치를 갖도록합니다. 후자는 어떤 관찰이 쓰레기통에 놓이지 않은 결과를 낳습니다. 'quantile'과'cut'으로 이것을 바꿀 수 있습니까? – stats134711