说我有一个像这样的数据集:

id <- c(1, 1, 2, 2, 3, 3)
code <- c("a", "b", "a", "a", "b", "b")
dat <- data.frame(id, code)




    id  code
1   1   a
2   1   b
3   2   a
4   2   a
5   3   b
6   3   b


使用dplyr,我如何计算每个ID有多少个



   id  countA
1   1   1
2   2   2
3   3   0


我正在尝试无法正常工作的东西,

countA<- dat %>%
group_by(id) %>%
summarise(cip.completed= count(code == "a"))


上面给了我一个错误,“错误:“ group_by_”没有适用于“逻辑”类对象的适用方法”

谢谢你的帮助!

最佳答案

请尝试以下操作:

library(dplyr)
dat %>% group_by(id) %>%
  summarise(cip.completed= sum(code == "a"))

Source: local data frame [3 x 2]
    id cip.completed
  (dbl)         (int)
1     1             1
2     2             2
3     3             0


之所以可行,是因为逻辑条件code == a只是一系列零和一,而该系列的总和就是出现的次数。

请注意,您不必在dplyr::count内使用summarise,因为它是summarise调用n()sum()本身的包装。参见?dplyr::count。如果您真的想使用count,我想您可以通过以下方法来做到这一点:首先过滤数据集以仅保留code==a的所有行,然后使用count会给您严格的正数(即非零)计数。例如,

dat %>% filter(code==a) %>% count(id)

Source: local data frame [2 x 2]

     id     n
  (dbl) (int)
1     1     1
2     2     2

关于r - dplyr计数一个特定变量值的数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36315163/

10-13 02:27