数据过滤是清洗过程的基本操作之一。R有很多方式可以实现,本文介绍几种常用方法,包括基本的数据框访问方式以及
dplyr
包的强大功能。
1. 示例数据
data <- data.frame(var=c(2,4,6,8,10,12,14,16))
我们定义了示例数据,假设我们需要返回大于10的数据。
2. 过滤数据
2.1 通过行、列方式
> data[data[,"var"]>10,]
[1] 12 14 16
因为数据框有行和列组成,data[,"var"]
表示所有行,列为var ;data[,"var"]>10
整体表示符合变量 var
大于 10 的行,后面空格所有列。我们只有一列,也可以写成 : data[data[,"var"]>10,"var"]
。
2.2 通过变量方式
> data[data$var>10,]
[1] 12 14 16
data$var>10
直接变量访问数据库列数据,整体表示这列数据大于的所有行,后面的逗号表示所有列。
2.3 通过subset方式
> subset(data,var>10)
var
6 12
7 14
8 16
2.4 使用 dplyr
包
> library(dplyr)
载入程辑包:‘dplyr’
> filter(data,var>10)
var
1 12
2 14
3 16
保存结果:
library(dplyr)
df <- filter(mtcars, mpg > 25)
3. dplyr
过滤语法及示例
3.1 dplyr
条件运算符
filter函数主要包括两个参数,第一个为要操作的数据框,第二个为条件,返回true 和 false。
关系运算主要包括:
==
(Equal to)!=
(Not equal to)<
(Less than)<=
(Less than or equal to)>
(Greater than)>=
(Greater than or equal to)
逻辑运算:
!
(logical NOT)&
(logical AND)|
(logical OR)
另外还有两个常用操作:
%in%
(检查值是否再多值的数组中)is.na()
(检查值是否为 NA)
3.2 示例代码
install.packages('ggplot2')
library('ggplot2')
diamonds
# 数值类型过滤
filter(diamonds, price > 2000)
# 字符串类型过滤
filter(diamonds, cut != 'Ideal')
# 多个数值类型条件
filter(diamonds, price >= 1000 & price <= 1500)、
# 过滤类型变量
filter(diamonds, cut %in% c('Ideal', 'Premium'))
# 也可以先定义向量变量
cuts_to_include <- c('Good', 'Very Good', 'Ideal', 'Premium')
filter(diamonds, cut %in% cuts_to_include)
多条件组合示例:
# 链接多个条件
filter(diamonds, cut == 'Ideal' & carat > 1)
filter(diamonds, cut == 'Ideal' & carat > 1 & color == 'E')
filter(diamonds, cut == 'Ideal' | carat > 1)
4. 总结
本文介绍了4中方式过滤数据框数据,其中 dplyr
的fliter
功能非常强大。