说我有一个像这样的数据集:
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/