是否有任何方法可以使用count
包R在nrow
/ dplyr
函数中选择/过滤数据帧?
还有,有没有办法在输出中包括具有0行的组的数量?我在.drop = FALSE
内尝试过count()
,但似乎没有用。
答案 0 :(得分:0)
如果列为.drop
并且有未使用的factor
,则level
应该可以工作。 ?dplyr::count
的文档提供了
.drop-对于count():如果FALSE将包括空组的计数(即数据中不存在的因子水平)。
在下面的示例中,'iris''Species'是factor
类,我们filter
淘汰了'setosa',然后将count
与.drop = FALSE
一起使用>
library(dplyr)
data(iris)
iris %>%
filter(Species != 'setosa') %>%
count(Species, .drop = FALSE)
# Species n
#1 setosa 0
#2 versicolor 50
#3 virginica 50
现在,我们在.drop
列类型上使用相同的character
iris %>%
filter(Species != 'setosa') %>%
mutate(Species = as.character(Species)) %>%
count(Species, .drop = FALSE)
# Species n
#1 versicolor 50
#2 virginica 50
此处,没有有关缺失值的属性或信息。因此,我们要么转换为factor
iris %>%
filter(Species != 'setosa') %>%
mutate(Species = as.character(Species),
Species = factor(Species, levels = levels(iris$Species))) %>%
count(Species, .drop = FALSE)
或用全套complete
library(tidyr)
iris %>%
filter(Species != 'setosa') %>%
mutate(Species = as.character(Species)) %>%
count(Species, .drop = FALSE) %>%
complete(Species = levels(iris$Species), fill = list(n = 0))
# A tibble: 3 x 2
# Species n
# <chr> <dbl>
#1 setosa 0
#2 versicolor 50
#3 virginica 50