install.packages("nycflights13")
library(nycflights13)
library(tidyverse)
• 查看flights包的介绍?
## ?flights
&与 |或 !非
%/%(整数除法) %%(求余)
• 查看整个数据集?
## view(flights)
列名下方有缩写可以查看数据的类型:
int 整数型变量
dbl 双精度浮点数型变量(实数)
chr 字符向量
dttm 日期+时间型变量
lgl 逻辑性变量(仅包括TRUE和FALSE的变量)
fctr 因子(具有固定数目的值的分类变量)
date 日期型变量
五大核心dplyr函数的工作方式都是相同的,第一个参数是一个数据框;随后的参数使用变量名称(不带引号)描述了在数据框上进行的操作;输出结果是一个新数据框。
filter( ) 按值筛选观测
arrange( ) 对行进行重新排序
select( ) 按名称选取变量
mutate( ) 使用现有变量的函数创建新变量
summarize( ) 将多个值总结为一个摘要统计量
①filter( )函数,按值筛选观测:
#### 筛选出1月1日的所有航班
filter(flights, month == 1, day == 1)
#### 选取出x是y中的一个值时的所有行
x %in% y
#### 找出11月或 12 月出发的所有航班:
m<-filter(flights,month==11|month==12)
等同于
m<-filter(flights,month%in%c(11,12))
②arrange( )函数,改变行的顺序,按升序排列。接受数据框和列名作为参数,
如果列名不只一个,那么就使用后面的列在前面排序的基础上继续排序:
• 按年月日排列
arrange(flights,year,month,day)
• desc( )函数,降序排列
arrange(flights,desc(arr_delay))
③select( )函数,按名称选取变量:
• 按名称选择列
select(flights,year,month,day)
• 选择"year"和"day"之间的所有列
select(flights,year:day)
• 选择除开year和day之间的所有列
select(flights,-(year:day)
还可以在select ()函数中使用一些辅助函数
### 匹配以“abc”开头的名称
starts_with("abc")
### 匹配以“xyz”结尾的名称
ends_with("xyz")
### 匹配包含“ijk”的名称
contains("ijk")
#### 选择匹配正则表达式的那些变量,正则表达式会匹配名称有重复字符的变量。
matches("(.)\\1")
#### 匹配x1、x2 和 x3
num_range("x", 1:3)
④mutate( )函数,使用现有变量的函数创建新变量:
(新列是现有列的函数,mutate将新列添加在数据集的最后)
• 在flights表格中增加gain和speed两项:
mutate(flights_1,
gain=arr_delay-dep_delay,
speed=distance/air_time*60)
• transmute( )函数,只想保留创建的新列
例:仅保留创建的gain,hours,gain_per_hour三列:
transmute(flights_1,
gain=arr_delay-dep_delay,
hours=air_time/60,
gain_per_hour=gain/hours)
例:航班数据中,可以根据dep_time计算出hour和minute
transmute(flights,
dep_time,
hour=dep_time%/%100,
minute=dep_time%%100)
⑤summarize( )函数:将多个值总结为一个摘要统计量,可将数据框折叠成一行。
• 每日平均延误时间
by_day<-group_by(flights,year,month,day)
summarize(by_day,delay=mean(dep_delay,na.rm=TRUE))
⑥rename( )函数,重命名
• 将flights表格中的year重命名为year1
rename(flights,year1=year)
⑦缺失值NA
• 确定一个值是否为缺失值## is.na( )函数
•na.rm参数在计算前除去缺失值na.rm=TRUE
•is.na( )函数统计数据中的缺失值,缺失值会显示为TRUE
• na.omit( )去掉缺失值所在行
• sum( !is_na( ) )非缺失值的计数
⑧辅助函数
• group_by( ) 将分析单位从整个数据集更改为单个分组
• seq( ) 它可以生成规则的数值序列
• start_with("abc") 匹配以abc开头的名称
• ends_with("abc") 匹配以abc结尾的名称
• contains("abc") 匹配包含abc的名称
• matches("(.)\\1") 匹配正则表达式的变量
• num_range("x",1:3) 匹配x1,x2和x3
例:表格以delay结尾
flights_1<-select(flights,
year:day,
ends_with("delay"),distance,air_time)
• min_rank( ) 排秩函数,第一名、第二名...第五名
• desc(x) 逆序排名次,第五名、第四名....第一名
##
y <- c(1, 2, 2, NA, 3, 4)
min_rank(y)
[1] 1 2 2 NA 4 5
min_rank(desc(y))
[1] 5 3 3 NA 2 1
• lead( )函数,返回序列的领先值
• lag( )函数,返回序列的滞后值
例 x<-1:10
lead(x)
lag(x)
• cumsum( ) 累加和
• cumprod( ) 累加积
• cummin( ) 累加最小值
• cummax( ) 累加最大值
• cummean( ) 累加均值
⑨%>% 管道,阅读代码时读作“然后”
• x %>% f(y) 转换为f(x,y)
• x %>% f(y) %>% g(z)转换成g(f(x,y),z)
例 :假设我们想要研究每个目的地的距离和平均延误时间之间的关系。
by_dest <- group_by(flights, dest)
delay <- summarize(by_dest,
count = n(),
dist = mean(distance, na.rm = TRUE),
delay = mean(arr_delay, na.rm = TRUE)
)
delay <- filter(delay, count > 20, dest != "HNL")
##也可以写成:
delays <- flights %>%
group_by(dest) %>%
summarize(
count = n(),
dist = mean(distance, na.rm = TRUE),
delay = mean(arr_delay, na.rm = TRUE)
) %>%
filter(count > 20, dest != "HNL")