《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))