2017-10-12 1 views
-2

저는 R이 처음이에요. 저는이 문제에 대해 꽤 오랜 시간을두고 있습니다. 'dplyr'패키지를 사용하여 십진수 또는 4 분위수를 만들려고 할 때마다 십진수가 더 적은 수의 그룹으로 병합됩니다. Like 나는 10 개 그룹을 원하지만 6, 4 또는 때로는 3 개 밖에 얻지 못합니다. 덜 데이터가 있으면 R이 작은 십진법을 그룹화/병합하려고합니다. 하지만이 문제를 피하고 싶습니다. 도와주세요! 감사합니다.R에서 십진수의 자동 병합을 피하는 방법은 무엇입니까?

코드는 다음과 같습니다 R은 작은 분위를 병합하기 때문에 여기에서

mydata <- data.frame(col1= c(0,00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,5,3,12,5,65,23,65984,21,5469,321,6,100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,5233,18000)) 

DecLocations <- quantile(mydata$col1, probs = c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9)) 
mydata$decile <- findInterval(mydata$col1,c(-Inf,DecLocations, Inf)) 

require(dplyr) 
mydata$decile<-factor(mydata$decile) 
decile_grp<-group_by(mydata,decile) 
decile_summ_test<-summarize(decile_grp, total_cnt=sum(col1)) 
decile_summ_test<-arrange(decile_summ_test, desc(decile)) 
View(decile_summ_test) 

는 난 단지 첫 6 분위를 얻고있다. 이것이 내가 여기서 피하려고하는 것입니다. 나는 그들이 정말로 작은 숫자를 가지고 있다고해도 10 개의 십 분위수를 모두 얻길 기대하고 있습니다.

+0

최소 재생산 가능한 예제? – CPak

+1

문제를 설명하고 출력으로 기대하는 것을 보여주는 간단한 데이터 예제를 제공해야합니다. 주석에 코드를 추가하지 마십시오. 오히려 코드/예제/업데이트로 원래 게시물을 수정하십시오. – CPak

+0

@CPak 지금 완료했습니다! – PerryThePlatipus

답변

0

당신이 당신의 DecLocations 벡터 살펴있는 경우는 R은 모든 분위를 만들어 볼 수 있지만 그 다음 낮은 분위는 findInterval 함수의 정의로 인해 삭제됩니다 중단 점과 분위로 findInterval 기능을 적용 할 때 (?findInterval 참조)

도움말 파일의 일부 :

설명

vec에서 감소하지 않는 중단 점의 벡터가 주어지면 x의 각 요소를 포함하는 간격을 찾으십시오. x [i [j]] ≤ x [j] < v [i [j] + 1]의 각 색인 j에 대해 i가 0 일 때, 즉 < 인 경우 findInterval (x, v [N + 1] : = + Inf, N < - 길이 (v). 두 경계에서 리턴 된 인덱스는 선택적인 인수 rightmost.closed와 all.inside에 따라 1만큼 다를 수 있습니다.

여기에서 함수가 최대 값을 찾습니다. v [i [j]] ≤ x [j] < v [i [j] + 1]와 같이 표현할 수있다. 그것이 십진수들이 떨어지는 이유입니다.

벡터에 모든 십진수를 나타내려면 하위 십진수에 0을 무작위로 할당해야합니다.

DecLocations <- quantile(mydata$col1, probs = c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9)) 
DecLocations 
10% 20% 30% 40% 50% 60% 70% 80% 90% 
    0 0 0 0 5 65 400 900 1400 

mydata$decile <- findInterval(mydata$col1,c(-Inf,DecLocations, Inf)) 
head(mydata) 
    col1 decile 
1 0  5 
2 0  5 
3 0  5 
4 0  5 
5 0  5 
6 0  5 
관련 문제