Есть ли способ выбрать / отфильтровать кадр данных в функциях count / nrow в R? - PullRequest
1 голос
/ 12 апреля 2020

Есть ли способ выбрать / отфильтровать фрейм данных внутри count / nrow функций, используя dplyr пакет R?

Кроме того, есть ли способ включить счетчик групп, которые имеют 0 строк в выводе? Я пробовал .drop = FALSE внутри count(), но, похоже, не работает.

1 Ответ

0 голосов
/ 12 апреля 2020

.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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...