美文网首页
使用dplyr进行数据转换

使用dplyr进行数据转换

作者: PriscillaBai | 来源:发表于2018-09-08 10:59 被阅读0次
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)

相关文章

网友评论

      本文标题:使用dplyr进行数据转换

      本文链接:https://www.haomeiwen.com/subject/rfukgftx.html