【问题标题】:How to count number of observations based on another variable values that are divided by ranges如何根据除以范围的另一个变量值计算观察次数
【发布时间】:2014-10-22 14:29:59
【问题描述】:

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

这是我的数据框示例:

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

...

【问题讨论】:

  • 为什么你认为 mwolfs 是 16 岁?我不太明白
  • @beginneR,因为没有包含超过 25 只狼的行
  • 没错@David Arenburg
  • 但是您的代码是基于birdrange(也适用于mwolfs)..所以这似乎是问题所在?
  • 是的@beginneR

标签: r dataframe


【解决方案1】:

如果我理解正确,您只是想制表。您可以将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

【讨论】:

  • 谢谢@shadow,但我收到错误“cut.default(x,breaks = seq(0, 1000, 25)) 中的错误:'x' 必须是数字”。另一件事:如何避免输出中的“snakes”变量?。
  • 我猜你是在创建cut$birdsrange 之后运行了这段代码?尝试运行它之前...
  • 你可以用dat[, c('birds', 'wolfs')]代替dat。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
相关资源
最近更新 更多