2017-05-29 74 views
1

我想子集數據框以收集來自所有列的信息。使用dplyr過濾器條件對數據集進行子集化

我會使用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

我們可以用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 
+0

感謝您有用的答案。查看頻率的最佳方法是什麼? – Prradep

+0

@Praded對不起,我沒有得到你的問題。你是否想要獲得一定比例的頻率? – akrun

+0

對不起,不清楚。如何查看列屬的值的頻率分佈/概要?我的意思是如何以更好的方式實現'msleep%>%count(genus)%>%count(n)'的輸出? – Prradep

相關問題