dplyr包是清洗数据时常用的一个包,因为我的编程深得师兄真传,清洗数据时从不调用函数,用基础的which,sapply,ifelse自己硬写,虽然最后程序乱得惨不忍睹,不过现在回想一下,确实这种方式让基本功打得非常扎实。
这次主要介绍五个函数,他们是dplyr的核心,分别是:
- filter() 按值进行筛选
- arrange() 对行进行排序
- select() 按名称选取变量
- mutate() 使用现有的变量函数创建新变量
- summarize() 将多值总结成一个摘要统计量
灵活调用函数,能让你在清洗数据时节省大量的时间。
一 filter
基于观测值筛选出一个子集。这次我们用nycflights13包中的一个数据集做测试。
library(nycflights13)
flights
- 想筛选12月25号的航班
filter(flights,month=12,day=25)
- 若是筛选对象过多,就用%in%这个函数。如,筛选11月和12月的航班
filter(flights,month %in% c(11,12))
二 arrange
arrange()的工作方式和filter函数非常相似,但是前者不是选择行,而是改变行的排序。有点类似于excel中的排序功能。
- 想把数据框按年,月,日的升序排列
arrange(flights,year,month,day)
- 也可以降序排列
arrange(flights,desc(arr_delay))
三 select
select() 数据集成百上千个变量都是常事,从中快速选出感兴趣的列,就靠这个函数。
- 按名称选列
select(flights,year,month,day)
- 也可以选择year到day之间的所有变量
select(flights,year:day)
- 想将几个变量放在开头,剩下的放在末尾
select(flights,time_hour,air_time,everything())
四 mutate添加新变量
- 在数据集的末尾添加新变量
mutate(flights,gain=arr_delay-dep_delay)
- 如果只想保留新变量,就用transmute
transmute(flights,gain=arr_delay-dep_delay)
五 group_by结合summarize()进行分组运算
先用group_by进行分组,再用summarize()针对分组进行运算,非常好用
- 想对每一天的dep_delay均值进行计算,怎么办?
by_day<-group_by(flights,year,month,day)
summarize(by_day,delay=mean(dep_delay,na.rm=T))
六 最后的最后,用管道函数%>%综合上述所有的函数,就可以写成一个小脚本啦。
delays %>%
filter(n>24) %>%
ggplot(mapping=aes(x=n,y=delay))+
geom_point(alpha=1/10)
网友评论