2014-10-22 4 views
1

다른 변수 값을 범위로 나누어 관측 수를 계산하고 싶습니다. 첫 번째 변수 (새)를 그룹화 할 수 있었고 관측 수를 셀 수있었습니다. 그러나 두 번째 변수에 대한 관측 수를 얻으려고 할 때 아래에 표시된 것처럼 잘못된 답이있었습니다. 어떻게이 점을 극복 할 수 있습니까? 발행물? 여기 범위로 나눈 다른 변수 값을 기준으로 관측 수를 계산하는 방법

내 데이터 프레임의 샘플입니다 :

dat$mbirds <- with(dat, ave(birds, birdsrange, FUN=length)) 
dat$mwolfs <- with(dat, ave(wolfs, birdsrange, FUN=length)) 

: 나는 두 개의 코드 라인을 추가보다

dat$birdsrange <- cut(dat$birds, breaks=seq(0, 1000, 25)) 

: 나는 그룹을 얻을 코드 줄을 실행

dat <- read.table(text = " birds wolfs  snakes 
          2  9   7 
          90  8   4 
          90  2   8 
          100  2   3 
          100  8   3 
          660  1   2 
          660  7   1 
          660  1   5 
          500  9   7 
          30  8   7 
          40  2   7 
          10  2   3 
          70  6   3 
          60  1   1 
          60  3   9 
          60  1   1 ",header = TRUE) 

그래서 출력을 얻었습니다 :

birds wolfs snakes birdsrange mbirds mwolfs 
1  2  9  7  (0,25]  2  2 
2  90  8  4 (75,100]  4  4 
3  90  2  8 (75,100]  4  4 
4 100  2  3 (75,100]  4  4 
5 100  8  3 (75,100]  4  4 
6 660  1  2 (650,675]  3  3 
7 660  7  1 (650,675]  3  3 
8 660  1  5 (650,675]  3  3 
9 500  9  7 (475,500]  1  1 
10 30  8  7 (25,50]  2  2 
11 40  2  7 (25,50]  2  2 
12 10  2  3  (0,25]  2  2 
13 70  6  3 (50,75]  4  4 
14 60  1  1 (50,75]  4  4 
15 60  3  9 (50,75]  4  4 
16 60  1  1 (50,75]  4  4 

"mbirds"수는 좋지만 그룹에 대한 16 회의 관찰을 기대할 때 "늑대"가 좋지 않습니다 : 다른 그룹의 경우 (0,25) 및 "0". 문제를 어떻게 해결할 수 있습니까? 원하는 결과는해야한다 : 내가 제대로 이해하면

range mbirds mwolfs 
(0,25] 2  16 
(25,50] 2  0 
(50,75] 4  0 

...

+1

왜 늑대가 16이 될 것으로 예상합니까? –

+1

@beginneR을 이해하지 못합니다. 25 개 이상의 늑대가 포함 된 행이 없기 때문에 –

+0

맞습니다. @David Arenburg –

답변

4

, 당신은 단지 표로 싶습니다. sapplytable을 함께 사용하여 원하는 결과를 얻을 수 있습니다.

res <- sapply(dat, function(x){ 
    table(cut(x, breaks=seq(0,1000,25))) 
}) 
head(res) 
##   birds wolfs snakes 
## (0,25]  2 16  16 
## (25,50]  2  0  0 
## (50,75]  4  0  0 
## (75,100]  4  0  0 
## (100,125]  0  0  0 
## (125,150]  0  0  0 
+0

고맙습니다. @shadow하지만 "cut.default (x, breaks = seq (0, 1000, 25)) 오류 :"x는 숫자 여야합니다. "오류가 발생합니다. 또 다른 한가지 : 출력에서 ​​"뱀"변수를 어떻게 피할 수 있습니까? –

+1

'cut $ birdsrange'를 작성한 후에이 코드를 실행했다고 생각하십니까? 전에 실행 해보십시오 ... – shadow

+1

당신은'dat' 대신'dat [, c ('birds', 'wolfs')]'를 사용할 수 있습니다. – shadow

관련 문제