使用dplyr过滤条件

时间:2017-05-29 09:16:02

标签: r dplyr subset

我想将数据框子集化以收集来自所有列的信息。

我将使用msleep数据集解释问题。

library(msleep)

我查看了列genus频率的频率,以查看频率的分布。

msleep %>% count(genus) %>% count(n)
## A tibble: 3 × 2
#      n    nn
#  <int> <int>
#1     1    73
#2     2     2
#3     3     2

我想提取主列中具有两次值的所有行。

msleep %>% count(genus) %>% filter(n==2)
## A tibble: 2 × 2
#   genus     n
#   <chr> <int>
#1  Equus     2
#2 Vulpes     2

如何达到以下预期产量?

预期产出:

msleep[msleep$genus %in% c('Equus','Vulpes'),]
## A tibble: 4 × 11
#        name  genus  vore          order conservation sleep_total sleep_rem sleep_cycle awake brainwt bodywt
#       <chr>  <chr> <chr>          <chr>        <chr>       <dbl>     <dbl>       <dbl> <dbl>   <dbl>  <dbl>
#1      Horse  Equus herbi Perissodactyla domesticated         2.9       0.6        1.00  21.1  0.6550 521.00
#2     Donkey  Equus herbi Perissodactyla domesticated         3.1       0.4          NA  20.9  0.4190 187.00
#3 Arctic fox Vulpes carni      Carnivora         <NA>        12.5        NA          NA  11.5  0.0445   3.38
#4    Red fox Vulpes carni      Carnivora         <NA>         9.8       2.4        0.35  14.2  0.0504   4.23

获得预期输出的任何其他方式也受到赞赏。

ps:有没有更好的方法来查看频率的频率?或者查看过滤条件(这里:n == 2)?

1 个答案:

答案 0 :(得分:1)

我们可以直接使用group_by然后使用filter,而不是通过count方法

msleep %>%
      group_by(genus) %>%
      filter(n() ==2)
# A tibble: 4 x 11
# Groups: genus [2]
#        name  genus  vore          order conservation sleep_total sleep_rem sleep_cycle awake brainwt bodywt
#       <chr>  <chr> <chr>          <chr>        <chr>       <dbl>     <dbl>       <dbl> <dbl>   <dbl>  <dbl>
#1      Horse  Equus herbi Perissodactyla domesticated         2.9       0.6        1.00  21.1  0.6550 521.00
#2     Donkey  Equus herbi Perissodactyla domesticated         3.1       0.4          NA  20.9  0.4190 187.00
#3 Arctic fox Vulpes carni      Carnivora         <NA>        12.5        NA          NA  11.5  0.0445   3.38
#4    Red fox Vulpes carni      Carnivora         <NA>         9.8       2.4        0.35  14.2  0.0504   4.23