美文网首页
使用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