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

R 如何根据除以范围的另一个变量值计算观察数,r,dataframe,R,Dataframe,我想根据除以范围的另一个变量值来计算观察值的数量。我能够对第一个变量的鸟类进行分组,并且能够计算其观察次数,但是当我试图获得第二个变量的观察次数时,我得到了错误的答案,如下所示。我如何克服这个问题 以下是我的数据框示例: dat <- read.table(text = " birds wolfs snakes 2 9 7 90

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

以下是我的数据框示例:

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)
mbirds计数是好的,但是mwolfs是坏的,因为我预计该组的观察值为16:0,25],其他组为0。我如何解决这个问题? 预期的结果应该是:

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

如果我没听错的话,你只想把它制成表格。您可以将sapply与表格一起使用,以获得所需的结果

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

如果我没弄错的话,你只想把它制成表格。您可以将sapply与表格一起使用,以获得所需的结果

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

你为什么期望mwolfs是16岁?我不太清楚understand@beginneR,因为没有行包含超过25个wolvesThat's right@David arenburg,但您的代码也基于mwolfs的birdsrange。。这似乎就是问题所在?是的,的确如此,为什么你认为mwolfs是16岁?我不太清楚understand@beginneR,因为没有行包含超过25个wolvesThat's right@David arenburg,但您的代码也基于mwolfs的birdsrange。。这就是问题所在,似乎是吗?是的,的确是@初学者谢谢@shadow,但我在cut.defaultx中得到了一个错误,breaks=seq0,1000,25:'x'必须是数字。另一件事:如何在输出中调用snakes变量?我猜您是在创建cut$birdsrange后运行此代码的?尝试运行它之前…您可以使用dat[,c'birds',wolfs']代替dat。谢谢@shadow,但我在cut.defaultx中遇到一个错误,breaks=seq0,1000,25:'x'必须是数字。另一件事:如何在输出中调用snakes变量?我猜您是在创建cut$birdsrange后运行此代码的?尝试运行它之前…您可以使用dat[,c'birds',wolfs',而不是dat。
range mbirds mwolfs
(0,25]  2      16
(25,50] 2      0
(50,75] 4      0
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