2013-09-10 7 views
1

내 목표는 하나의 특정 상점의 존재와 이러한 상점을 찾을 수있는 인구 밀도 사이에 링크가있는 경우 피봇 테이블을 비교하는 것입니다. 이를 위해 CSV 파일을 만들었습니다. 여기에는 매장이 있거나없는 600 개의 지역이 포함되어 있습니다. 이 파일은 600 행과 2 열로 구성됩니다. 1/한 영역에 대한 인구 밀도를 나타내는 숫자와이 영역 (0, 1 또는 2)에있는이 특정 상점의 수량의 2/2입니다.R에 연속 변수를 그룹화하십시오

피벗 테이블을 수행하려면 각 60 줄의 10 개 그룹 (첫 번째 그룹에는 60 개의 작은 밀도가있는 마지막 그룹까지 60 개의 큰 밀도)을 그룹화해야합니다. 그러면 밀도가 낮거나 높을 지 여부에 상관없이 상점의 수를 쉽게 볼 수 있습니다. 나는 이해할 수 있는가 (나는 희망한다)? :)

나는 정말로 어렵지 않습니다. 그러나 거기에는 약간의 길 (그리고 꾸러미)이 있습니다. 나는 그것을 잃어 버렸습니다.

나의 주요 문제 : 내 변수를 각각 60 줄로 구성된 10 개의 그룹으로 그룹화하는 가장 간단한 방법은 무엇입니까? 나는 성공하지 않고 cut()/cut2()과 hist()를 시도했다. bin_var()와 reshape()에 대해 들었지만이 경우에 도움이 될 수있는 방법을 모르겠다.


예를 들어 (저스틴이 물었을 때). 컷()와 :

data <- read.csv("data.csv", sep = ";") 
groups <- cut(as.numeric(data$densit_pop2), breaks=10) 
summary(groups) 
(0.492,51.4] (51.4,102] (102,153] (153,204] (204,255] (255,306] 
     53   53   52   52   52   54 
(306,357] (357,408] (408,459] (459,510] 
     52   59   53   54 

좋아, 좋은, 참으로 '그룹은'라인의 거의 같은 수의 10 개 그룹을 포함합니다. 그러나 그 간격에 표시된 확실성 값은 나를 감각이 가지지 않습니다. 다음은 밀도 열의 첫 번째 줄입니다 (점차적으로 정렬 됨).

> head(data$densit_pop2) 
[1] 14,9 16,7 17,3 18,3 20,2 20,5 
509 Levels: 100 1013,2 102,4 102,6 10328 103,6 10375 10396,8 104,2 ... 99,9 

즉, 첫 번째 그룹을보십시오. 14.9가 가장 작은 값일 때 왜 0.492입니까? 첫 번째 값과 51.4 값 사이의 수를 수동으로 계산하면 76이됩니다. 왜 53 행으로 표시됩니까? 정확한 데이터 프레임의 순위가 가장 낮습니다.

나는 확실히 뭔가를 놓친다. 그러나 무엇?

+2

실제 코드에서와 같이 시도한 것을 공유 할 수 있습니까? 어떻게 '컷'과 '히스'가 작동합니까? 각 그룹에서 짝수를 원하거나 범위 전체에서 분포를 원하십니까? – Justin

+0

당신은 [백분위 수] (http://stackoverflow.com/questions/7165683/where-is-the-percentile-function-in-cran-r) – Metrics

+0

@justin을 사용할 수 있습니다. 아주 좋은 질문입니다! 나는 * 정말로 * 각 그룹마다 짝수를 필요로한다. 그것은 내가 '컷'과 '히스'로 만드는 데 실패한 것입니다 ... – jonathan

답변

3

숫자 변수를 사용하면 cut2에 만족할 것입니다. 소수점 구분 기호로 쉼표를 사용하는 경우 read.csv2을 사용하거나 데이터 세트를 읽을 때 dec = "," 인수를 사용하십시오.

y = runif(600, 14.9, 10396.8) 

require(Hmisc) 
summary(cut2(y, m = 60)) 

당신은 cut과 같은 일을 할 수 있지만, 조금 더 많은 작업이 필요 동일한 그룹을 얻을 수있는 적절한 분위에서 당신의 휴식을 설정해야합니다.

summary(cut(y, breaks = quantile(y, probs = seq(0, 1, 1/10)), include.lowest = TRUE)) 
+0

완벽! 나는 내가 원하는 것을 해냈다. 모두에게 감사드립니다! :) – jonathan

1

데이터에 응답 : 당신은 데이터 입력의 오류를 수정해야합니다 다음

data$densit_pop3 <- as.numeric( 
         sub('\\,', '.', 
         as.character(data$densit_pop2))) 

. 이 라인을 따라 뭔가 (이 정말 텍스트 파일에서 데이터를로드에 대한 문제가 아니라 가정) : 당신이 플롯하려는 경우

with(BNP, by(proBNP.A, Sex, summary)) 

Sex: Female 
    Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 
    5.0 55.7 103.6 167.9 193.6 5488.0 3094899 
--------------------------------------------------------------------- 
Sex: Male 
    Min. 1st Qu. Median Mean 3rd Qu. Max. NA's 
     5  30  63  133  129 5651 4013760 

: 하나를 얻을 수 있습니다 했나 출력의 예로서

with(dfrm, by(dens, factor(shops), summary)) 

이 (이 경우 합리적인 요구처럼 보인다) 밀도의 밀도를보고 다음이 시도 :.

require(lattice) 
densityplot(~dens|shops, data=dfrm) 

을 (그리고이 "피벗 테이블"을 호출 중지 바랍니다 그건 aggreg이다 Excel의 애트리온 전략과 표준 통계 또는 수학 전문 용어로 원하는 출력을 실제로 설명해야합니다.)

+0

좋아, 내가 그것을 재현, 그것은 정렬 및 데이터를 선택하는 것이 유용하게 보입니다. 하지만 (미안), 나는 어떻게 그걸로 60 라인의 내 10 그룹을 만들 수 있는지 이해가 안돼. 나는 데이터를 선택하고 싶지 않다. 나는 열을 더 빠르게 정렬하고 (ok, easy), 10 개의 그룹을 쌓아서 10 개의 라인을 얻고 싶다. 간단히 설명하기가 어렵습니다. 그리고 미안하다. 그리고 추악한 "피벗 테이블"을 사용하는 것을 멈추기 위해 ok, 그것은 단지 번역 시설이었습니다 ... 그리고이 첫 번째 답변에 감사드립니다. ;) – jonathan

관련 문제