如何根据除以范围的另一个变量值计算观察次数

时间:2014-10-22 14:29:59

标签: r dataframe

我想基于另一个除以范围的变量值来计算观察次数。我能够对第一个变量(鸟类)进行分组,并且我能够计算其观察数量,但是当我试图得到第二个变量的观察数量时,我得到了错误的答案,如下所示。我怎么能克服这个问题

这是我的数据框样本:

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)

我运行这行代码来获取组:

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

我添加了两个代码行:

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

所以我得到了这个输出:

   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”计数很好但是“mwolfs”很糟糕,因为我预计会为该组获得16次观察:(0,25)和其他组的“0”。我如何解决问题? 期望的结果应该是:

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

...

1 个答案:

答案 0 :(得分: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