有什么办法可以在R中的计数/行函数中选择/过滤数据帧?

时间:2020-04-11 21:26:52

标签: r

是否有任何方法可以使用count包R在nrow / dplyr函数中选择/过滤数据帧?

还有,有没有办法在输出中包括具有0行的组的数量?我在.drop = FALSE内尝试过count(),但似乎没有用。

1 个答案:

答案 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