使用dplyr过滤器条件对数据集进行子集化
问题描述:
我想子集数据框以收集来自所有列的信息。使用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)?
答
我们可以用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
感谢您有用的答案。查看频率的最佳方法是什么? – Prradep
@Praded对不起,我没有得到你的问题。你是否想要获得一定比例的频率? – akrun
对不起,不清楚。如何查看列属的值的频率分布/概要?我的意思是如何以更好的方式实现'msleep%>%count(genus)%>%count(n)'的输出? – Prradep