.drop
должно работать, если столбец factor
и есть неиспользованный level
. Документация для ?dplyr::count
дает
.drop - Для count (): если FALSE будет включать значения для пустых групп (т.е. для уровней факторов, которых нет в данных).
В приведенном ниже примере 'ирис' 'Виды' - это класс 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