我想基于另一个除以范围的变量值来计算观察次数。我能够对第一个变量(鸟类)进行分组,并且我能够计算其观察数量,但是当我试图得到第二个变量的观察数量时,我得到了错误的答案,如下所示。我怎么能克服这个问题
这是我的数据框样本:
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
...
答案 0 :(得分:4)
如果我理解正确,你只想制表。您可以将sapply
与table
一起使用,以获得所需的结果。
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