假设我有一个这样的数据集:
id <- c(1, 1, 2, 2, 3, 3)
code <- c("a", "b", "a", "a", "b", "b")
dat <- data.frame(id, code)
IE。,
id code
1 1 a
2 1 b
3 2 a
4 2 a
5 3 b
6 3 b
使用 dplyr,我如何计算每个 id 有多少个 a
IE。,
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/