数据整理—dplyr包(filter系列)
作者:小橙子
来源:小橙子学数据分析
数据整理/清洗,占据了数据分析80%的时间
dplyr提供了一种方式,可以高效处理数据
dplyr是什么?
官方解释: a grammar of data manipulation
主要介绍dplyr中,几个函数
1filter 系列 #筛选满足条件的样本(cases)
2select 系列 #筛选满足条件的变量
3mutate 系列 #生成新的变量
4summarise 系列 #概括数据集信息
5join 系列 #关联函数,同SQL中的join
在数据处理过程中,经常会遇到这几个函数
filter系列:filter、filter_all、filter_at、filter_if
用法:filter(.data, ...)
备注:filter对group_by之后的数据集无效,并且对ungroup_by的数据集处理起来更快速
1library(tidyverse) #直接加载tidyverse,使用iris、mtcars数据集来演示
2#iris数据集中,筛选Species为“setosa”,并且Sepal.Length大于5的样本
3filter(iris, Species == "setosa" & Sepal.Length >= 5.5) #"&"也可以替换成“,”
4# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5# 5.8 4.0 1.2 0.2 setosa
6# 5.7 4.4 1.5 0.4 setosa
7# 5.7 3.8 1.7 0.3 setosa
8# 5.5 4.2 1.4 0.2 setosa
9# 5.5 3.5 1.3 0.2 setos
filter支持以下几种判断形式:
关系类型:<、 <= 、 >、 >=、==、!=、is.na()、 !is.na()
&、 |、 !、 xor() #针对向量集的操作判断
between()、%in%、 near() #sqrt(2) ^ 2 == 2 返回FALSE,near(sqrt(2) ^ 2, 2)则TRUE
all_vars()、any_vars() #出现于filter_all、filter_at、filter_if中,作为判断条件
filter系列,还有几个变异函数:filter_all、filter_at、filter_if
用法:filter_all(.tbl, .vars_predicate)
filter_at(.tbl, .vars, .vars_predicate)
filter_if(.tbl, .predicate, .vars_predicate)
1filter_all(mtcars, any_vars(. > 150)) #筛选任何变量>150的样本
2filter_at(mtcars, vars(starts_with("d")), any_vars((. %% 2) == 0))
3#筛选变量以“d”结尾,并且变量 "%%2" 等于0
4filter_if(mtcars, ~ all(floor(.) == .), all_vars(. != 0))
5# 筛选变量向下取整 == 原变量数值, 并且这部分变量的数值!= 0 的样本集
filter总结:
filter通过“判断条件”筛选cases,“判断条件”则类似于SQL中的“where”语句。
(select * from table where condition is true)
filter的欠缺,在于每次都返还全部变量的样本,无法筛选具体的变量。
如何实现对样本集的变量筛选,请关注下一篇“select ”
——————————————
往期精彩: