生信小白菜之关于filter函数的一切

本文通过nycflights13包展示了如何在R语言中使用dplyr库的filter函数对航班数据进行筛选,包括日期、时间、延误、航空公司等条件的筛选,以及处理缺失值和使用逻辑运算符的操作。最后给出了几个实践性的数据分析练习题目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《R Data Science》

使用nycflights13包中的数据示例

library(dplyr)
install.packages("nycflights13")
library(nycflights13)
View(flights) # 注意 View 要大写哦
# View可以另一页打开,方便观察

?flights # 查看帮助文档
# year month day 起飞日期
# dep_time, arr_time 实际起飞、抵达时间
# sched_dep_time, sched_arr_time 预期安排的起飞、抵达时间
# dep_delay, arr_delay 起飞或到达的延误时间
# carrier 航空公司缩写
# flight 航班编号
# tailnum 飞机尾号
# origin, dest 始发地、目的地
# air_time 空中时间
# distance 飞行距离
# hour, minute 以小时和分钟为单位的预定起飞时间

使用filter筛选行

# filter可以依据观测值选出一个子集
# 第一个参数是数据框名称,第二个及随后参数是用来筛选数据框的表达式
filter(flights,month==1,day==30) # 1月30号的所有航班

## 如果想要保存函数结果,就要进行赋值操作  <- 
### R语言要么输出结果,要么将结果保存在一个变量里面
### 如果想同时完成输出结果和赋值,用括号将赋值语句括起来
(df1 <- filter(flights,month==1,day==30))

filter筛选之比较运算符号

# > >= 
# < <= 
# !=(不等于) ==(等于)

# 在使用==时,有一些特殊的例子——浮点数
## 计算机只能进行有限精度运算,对于无限位数字只能取近似值
# 例如 sqrt(2) 对2开平方会得到无限小数的近似值
sqrt(2)^2==2 # FALSE
near(sqrt(2)^2,2) # TRUE

filter筛选之逻辑运算符号

# filter()中多个参数之间默认是“与”的关系
# 即每一个表达式都符合的数据才会出现在结果里面
# & 与
# !非
# |或

# 找出11月或12月出发的所有航班
filter(flights,month==12|month==11)
## 注意!这里不能写成`filter(flights,month==12|11)`
### 这样写的意思是"12|11"为一个逻辑表达式,它的逻辑值为TRUE,即(1)
### 那么实际筛选的是month==1的flight

# 找出11月或12月出发的所有航班,也可以写成
filter(flights,month %in% c(11,12))
## x %in% y 是选取x在y中存在的数值

# 德摩根定律
## !(x & y) 等价于 !x | !y
## !(x | y) 等价于 !x & !y
# 例如:找出延误时间(到达或出发)不多于2小时的航班
filter(flights,!(arr_delay>120|dep_delay>120))
filter(flights,arr_delay<=120,dep_delay<=120)

缺失值

# NA表示未知的值
# NA具有“传染性”,即运算中包含未知值,那么结果也会是未知值
## 例如
NA == NA # NA
## 因为两个未知值之间是否相等,R也不知

# 想要确定一个值是否为缺失值,可以使用
x <- NA
is.na(x) # TRUE

# filter()只能筛选条件为TRUE的行,如果想保留缺失值
df<- tibble(x=c(1,NA,3))
is.na(x) 
filter(df,is.na(x)|x>1)

between()

# between(x, left, right) 
## x	 A vector

between(1:12, 7, 9)
# 返回等长的逻辑

x <- rnorm(1e2)
# 利用TRUE取子集
x[between(x, -1, 1)]

练习题

# 找出满足以下条件的所有航班

## 到达时间延误2小时及以上
filter(flights,arr_delay>=120)
## 飞往IAH或HOU机场
filter(flights,dest %in% c("IAH","HOU"))
## 夏季(7-9月)出发
filter(flights,month %in% c(7:9))
## 到达时间延误超2小时,但出发时间没有延误
filter(flights,arr_delay>120,dep_delay==0)
## 延误至少1小时,但飞行过程弥补回30分钟的航班
filter(flights,dep_delay>=60&(dep_delay-arr_delay>30))
## 出发时间在午夜至早上6点之间(包括0点、6点)
filter(flights,dep_time %in% c(0:2400))
filter(flights,between(dep_time,0,2400))

# dep_time有缺失值的航班有多少
table(is.na(flights$dep_time))
#  FALSE 328521  TRUE 8255 
filter(flights,is.na(dep_time))
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值