本次介绍的是R语言中非常流行的数据处理包dplyr
,它主要聚焦于tibble
型的数据结构,此结构是对数据框dataframe
的重构,在呈现大型数据集时非常友好,具体表现为:附带数据行数和列数,每列数据类型,少量数据示例和省略的行数等。
以下就根据日常数据处理的需求,依次介绍dplyr
包中涉及的主要函数。
nycflights13
包下的 flights
数据集,包含2013年从纽约飞往各地的航班信息,共336776条数据,如下图所示。
各数据字段含义可通过?filghts
进行查看,在此不再介绍。考虑代码的简洁性,以下操作均使用管道运算符%>%
展开,减少了构建中间变量的麻烦。(%>%
可以将左边的结果作为右边函数的第一个参数)
1、筛选year
、month
、carrier
、flight
列
library(dplyr)
flights%>%
select(year,month,carrier,flights)%>%
head()
2、筛选以【d】为首字母的变量
flights%>%
select(starts_with("d"))%>%
head()
3、筛选包含【lay】的变量
flights%>%
select(contains("lay"))%>%
head()
4、筛选以【time】结尾的变量
flights%>%
select(ends_with("time"))%>%
head()
1、多条件筛选【筛选出4月14日起飞,飞行距离在1000-2000之间的,航空公司UA
、B6
、AS
的信息】
flights%>%
select(year,month,day,distance,carrier)%>%
filter(month==4,day==14,
between(distance,1000,2000),
carrier%in%c("UA","B6","AS"))
2、正则筛选【筛选出tailnum
中包含AA
字段的航班信息】
#grepl正则筛选
flights%>%
select(year,month,day,distance,carrier,tailnum)%>%
filter(grepl("AA",tailnum))
#stringr正则筛选
flights%>%
select(year,month,day,distance,carrier,tailnum)%>%
filter(stringr::str_detect(tailnum,pattern="AA"))
依次按照year
,month
,day
,flight
排序,其中day
、flight
为降序排列
flights%>%
select(year,month,day,flight)%>%
arrange(year,month,-day,-flight)
计算飞行节约的时间和平均每小时节约的时间【arr_delay为到达延误时间,dep_deplay为起飞延误时间,负值表示提前到达或提前起飞】
flights%>%
mutate(gain=arr_delay-dep_delay,
gain_per_hour=gain/(air_time/60))%>%
select(gain,gain_per_hour)%>%
head()
Group_by
函数通常与summarise
函数结合使用,以下代码表示:按照航公公司carrier
分组,计算每个航空公司的个数、平均起飞延误时间、平均到达延误时间、以及距离的标准差,其中na.rm=TRUE
表示计算时,忽略缺失值
flights%>%
group_by(carrier)%>%
summarise(count=n(),
dep_delay_mean=mean(dep_delay,na.rm=TRUE),
arr_delay_mean=mean(arr_delay,na.rm=TRUE),
distance_sd = sd(distance,na.rm = TRUE))
dplyr
包提供了类似SQL
中的表连接语句函数,具体分为full_join()
、inner_join()
、left_join()
、right_join()
,具体连接的方式可见下图
现以left_join
函数为例进行演示说明
student<-data.frame(id=c("1001","1002","1003"),
name=c("bob","jack","gin"),
class_type=c("一班","二班","三班"))
score<-data.frame(id=c("1001","1002"),
score=c(70,80))
left_join(student,score,by="id") #by为连接字段
dplyr
包中常用的函数名称如下表所示
作用 | 函数名 |
---|---|
筛选 | filter 、select |
排序 | arrange |
添加修改变量 | mutate |
分组计算 | group_by |
连接 | join |
以上就是本次分享的全部内容~