搜索
查看: 931|回复: 1

[R] 使用dplyr进行数据转换

[复制链接]

5

主题

6

帖子

48

积分

新手上路

Rank: 1

积分
48
发表于 2018-9-8 11:13:22 | 显示全部楼层 |阅读模式
本帖最后由 priscilla 于 2018-9-8 12:37 编辑

dplyr包是转换数据时常用的一个包,因为我的编程深得师兄真传,清洗数据时从不调用函数,用基础的which,sapply,ifelse自己硬写,虽然最后程序乱得惨不忍睹,不过现在回想一下,确实这种方式让基本功打得非常扎实。这次主要介绍五个函数,他们是dplyr的核心,分别是:
1.filter() 按值进行筛选
2.arrange() 对行进行排序
3.select() 按名称选取变量
4.mutate() 使用现有的变量函数创建新变量
5.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)







上一篇:R数据科学啃书
下一篇:R数据科学啃书——ggplot
回复

使用道具 举报

365

主题

512

帖子

1713

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1713
发表于 2018-9-9 22:04:20 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-11-21 10:02 , Processed in 0.045361 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.