2017-05-29 113 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

相关问题