R语言数据处理包dplyr、tidyr笔记
2017-04-17 15:53
405 查看
dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了与其它数据库的接口;tidyr包的作者是Hadley Wickham, 该包用于“tidy”你的数据,这个包常跟dplyr结合使用。
本文将介绍dplyr包的下述五个函数用法:
筛选: filter()
排列: arrange()
选择: select()
变形: mutate()
汇总: summarise()
分组: group_by()
以及tidyr包的下述四个函数用法:
gather—宽数据转为长数据;
spread—长数据转为宽数据;
unit—多列合并为一列;
separate—将一列分离为多列;
使用datasets包中的mtcars数据集做演示,首先将过长的数据整理成友好的tbl_df数据:
4000
可见separate()函数和unite()函数的功能相反。
转载:http://www.cnblogs.com/shangfr/p/6110614.html
本文将介绍dplyr包的下述五个函数用法:
筛选: filter()
排列: arrange()
选择: select()
变形: mutate()
汇总: summarise()
分组: group_by()
以及tidyr包的下述四个函数用法:
gather—宽数据转为长数据;
spread—长数据转为宽数据;
unit—多列合并为一列;
separate—将一列分离为多列;
dplyr、tidyr包安装及载入
install.packages("dplyr") install.packages("tidyr") library(dplyr) library(tidyr)
使用datasets包中的mtcars数据集做演示,首先将过长的数据整理成友好的tbl_df数据:
mtcars_df = tbl_df(mtcars)
dplyr包基本操作
1.1 筛选: filter()
按给定的逻辑判断筛选出符合要求的子数据集filter(mtcars_df,mpg==21,hp==110) # A tibble: 2 x 11 mpg cyl disp hp drat wt qsec vs am gear carb <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 21 6 160 110 3.9 2.620 16.46 0 1 4 4 2 21 6 160 110 3.9 2.875 17.02 0 1 4 4
4000
1.2 排列: arrange()
按给定的列名依次对行进行排序:arrange(mtcars_df, disp) #可对列名加 desc(disp) 进行倒序 # A tibble: 32 x 11 mpg cyl disp hp drat wt qsec vs am gear carb <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 2 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 3 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 4 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 5 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 6 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 7 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 8 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 9 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 10 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 # ... with 22 more rows
1.3 选择: select()
用列名作参数来选择子数据集:select(mtcars_df, disp:wt) # A tibble: 32 x 4 disp hp drat wt * <dbl> <dbl> <dbl> <dbl> 1 160.0 110 3.90 2.620 2 160.0 110 3.90 2.875 3 108.0 93 3.85 2.320 4 258.0 110 3.08 3.215 5 360.0 175 3.15 3.440 6 225.0 105 2.76 3.460 7 360.0 245 3.21 3.570 8 146.7 62 3.69 3.190 9 140.8 95 3.92 3.150 10 167.6 123 3.92 3.440 # ... with 22 more rows
1.4 变形: mutate()
对已有列进行数据运算并添加为新列:mutate(mtcars_df, NO = 1:dim(mtcars_df)[1]) # A tibble: 32 x 12 mpg cyl disp hp drat wt qsec vs am gear carb NO <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 1 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 2 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 3 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 4 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 5 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 6 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 7 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 8 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 9 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 10 # ... with 22 more rows
1.5 汇总: summarise()
对数据框调用其它函数进行汇总操作, 返回一维的结果:summarise(mtcars_df, mdisp = mean(disp, na.rm = TRUE)) # A tibble: 1 x 1 mdisp <dbl> 1 230.7219
1.6 分组: group_by()
当对数据集通过group_by()添加了分组信息后,mutate(),arrange() 和 summarise() 函数会自动对这些 tbl 类数据执行分组操作。cars <- group_by(mtcars_df, cyl) countcars <- summarise(cars, count = n()) # count = n()用来计算次数 # A tibble: 3 x 2 cyl count <dbl> <int> 1 4 11 2 6 7 3 8 14
tidyr包基本操作
2.1 宽转长:gather()
使用gather()函数实现宽表转长表,语法如下:gather(data, key, value, …, na.rm = FALSE, convert = FALSE) data:需要被转换的宽形表 key:将原数据框中的所有列赋给一个新变量key value:将原数据框中的所有值赋给一个新变量value …:可以指定哪些列聚到同一列中 na.rm:是否删除缺失值 widedata <- data.frame(person=c('Alex','Bob','Cathy'),grade=c(2,3,4),score=c(78,89,88)) widedata person grade score 1 Alex 2 78 2 Bob 3 89 3 Cathy 4 88 longdata <- gather(widedata, variable, value,-person) longdata person variable value 1 Alex grade 2 2 Bob grade 3 3 Cathy grade 4 4 Alex score 78 5 Bob score 89 6 Cathy score 88
2.2 长转宽:spread()
有时,为了满足建模或绘图的要求,往往需要将长形表转换为宽形表,或将宽形表变为长形表。如何实现这两种数据表类型的转换。使用spread()函数实现长表转宽表,语法如下:spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE) data:为需要转换的长形表 key:需要将变量值拓展为字段的变量 value:需要分散的值 fill:对于缺失值,可将fill的值赋值给被转型后的缺失值 mtcarsSpread <- mtcarsNew %>% spread(attribute, value) head(mtcarsSpread) car am carb cyl disp drat gear hp mpg qsec vs wt 1 AMC Javelin 0 2 8 304 3.15 3 150 15.2 17.30 0 3.435 2 Cadillac Fleetwood 0 4 8 472 2.93 3 205 10.4 17.98 0 5.250 3 Camaro Z28 0 4 8 350 3.73 3 245 13.3 15.41 0 3.840 4 Chrysler Imperial 0 4 8 440 3.23 3 230 14.7 17.42 0 5.345 5 Datsun 710 1 1 4 108 3.85 4 93 22.8 18.61 1 2.320 6 Dodge Challenger 0 2 8 318 2.76 3 150 15.5 16.87 0 3.520
2.3 合并:unit()
unite的调用格式如下:unite(data, col, …, sep = “_”, remove = TRUE) data:为数据框 col:被组合的新列名称 …:指定哪些列需要被组合 sep:组合列之间的连接符,默认为下划线 remove:是否删除被组合的列 wideunite<-unite(widedata, information, person, grade, score, sep= "-") wideunite information 1 Alex-2-78 2 Bob-3-89 3 Cathy-4-88
2.4 拆分:separate()
separate()函数可将一列拆分为多列,一般可用于日志数据或日期时间型数据的拆分,语法如下:separate(data, col, into, sep = “[^[:alnum:]]+”, remove = TRUE, convert = FALSE, extra = “warn”, fill = “warn”, …) data:为数据框 col:需要被拆分的列 into:新建的列名,为字符串向量 sep:被拆分列的分隔符 remove:是否删除被分割的列 widesep <- separate(wideunite, information,c("person","grade","score"), sep = "-") widesep person grade score 1 Alex 2 78 2 Bob 3 89 3 Cathy 4 88
可见separate()函数和unite()函数的功能相反。
转载:http://www.cnblogs.com/shangfr/p/6110614.html
相关文章推荐
- R语言数据处理包dplyr、tidyr笔记
- R语言数据处理包dplyr、tidyr笔记
- R语言数据处理包dplyr、tidyr笔记
- R语言中的数据处理包dplyr、tidyr笔记
- R语言dplyr、tidyr使用笔记
- R语言学习笔记——R语言数据处理基本操作
- R语言里的矩阵处理学习笔记
- R语言与时间序列学习笔记(2)
- R语言与点估计学习笔记(矩估计与MLE)
- R语言绘图学习笔记
- 数据挖掘 自习笔记 第二章 数据处理实践(下)
- R语言学习笔记1——对象的创建
- R语言与马克维茨资产组合理论学习笔记(fportfolio包简介)
- R语言与点估计学习笔记(EM算法与Bootstrap法)
- R语言的数据导入与导出学习笔记
- R语言学习笔记
- 团购市场分析:24券 团购数据处理过程【笔记】
- R语言----绘图学习笔记之Scatter plots
- 用R语言求概率分布_R语言学习笔记5
- R语言----绘图学习笔记之Scatter plots