首页 文章

使用dplyr过滤条件对数据集进行子集化

提问于
浏览
1

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

我将使用 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 回答

  • 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
    

相关问题