R语言中的数据处理包dplyr、tidyr笔记

dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了与其它数据库的接口;tidyr包的作者是Hadley Wickham, 该包用于“tidy”你的数据,这个包常跟dplyr结合使用。

本文将介绍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 11mpg   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

 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 12mpg   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 1mdisp<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 2cyl 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()函数的功能相反。

转载于:https://www.cnblogs.com/yjd_hycf_space/p/6686141.html

R语言中的数据处理包dplyr、tidyr笔记相关推荐

  1. R语言 tidyverse 之数据处理:dplyr (中)

    在 dplyr 中使用 summarize 函数进行数据汇总时,通常要结合分组函数 group_by 一起使用. 1. group_by:分组函数 group_by 一般会和 mean.sum.max ...

  2. R语言中利用jiebaR包实现中文分词

    文章目录 介绍 worker()函数介绍 参数介绍 new_user_word()函数介绍 参数介绍 freq()函数介绍 实例 利用默认库进行分词 利用自定义词库进行分割 通过文本文件添加用户自定义 ...

  3. R语言中的机器学习包

    转载自:http://blog.csdn.net/liuxincumt/article/details/7527917 Machine Learning & Statistical Learn ...

  4. R语言中使用UpSet包绘制多集合Venn图

    集合的交集一帮采用Venn图进行展示,但当集合数目超过3时,使用Venn图直接展示会显得比较杂乱,我们倾向于使用UpSet展示. 这里,我们介绍UpSet的概念,并展示如何使用UpSet packag ...

  5. 用r语言画出y = ax^2 + bx + c,R语言中如何使用最小二乘法

    这里只是介绍下R语言中如何使用最小二乘法解决一次函数的线性回归问题. 代码如下: > x > y > lsfit(x,y) 结果如下: $coefficients Intercept ...

  6. r语言中正定矩阵由于误差不正定_R语言之数据处理(一)

    在上一篇小文中,提到了关于R语言导入数据的一些方法,之后的重点就转向了数据的处理上.数据处理其实在整个数据分析项目中所占用的时间是比较多的,所以根据处理的目的不同,也有不同的处理方法.在R语言中,我通 ...

  7. R语言中的管道操作——magrittr包

    R语言中的管道操作--magrittr包 一.项目环境 开发工具:RStudio R:3.5.2 相关包:magritter 二.数据准备以及问题阐述 这次要解决的问题是如何使用提取数据框中所有包含缺 ...

  8. R语言ggplot2可视化:使用dplyr包计算每个分组个数的比例(对计算获得的百分比进行近似,值保留整数部分)、使用ggplot2可视化条形图(bar plot)、并在条形图上添加百分比标签

    R语言ggplot2可视化:使用dplyr包计算每个分组个数的比例(对计算获得的百分比进行近似,值保留整数部分).使用ggplot2可视化条形图(bar plot).并在条形图上添加百分比标签 目录

  9. R语言中最强的神经网络包RSNNS

    转载自:http://www.dataguru.cn/article-1470-1.html R语言中已经有许多用于神经网络的package.例如nnet.AMORE以及neuralnet,nnet提 ...

最新文章

  1. 可扩展标记语言--XML
  2. python的assert(断言)异常步骤机制
  3. 【C 语言】字符串拷贝 ( 指针使用前判空 | while 空语句 )
  4. SQLite学习手册(内置函数)
  5. python使用技巧_python小技巧
  6. duilib WindowImplBase BUG修复 --- 按一次ESC键, 关闭多个窗口
  7. CentOS 报no acceptable C compiler found in $PATH的解决办法
  8. 《System语言详解》——6. 语句种类
  9. [转载]CAST-CONVERT两个函数进行类型转换时的异同点
  10. 蓝湖 Figma 插件被下架了怎么办?蓝湖的替代品列表
  11. Python Scrapy 爬取 前程无忧招聘网
  12. AD936x+ZYNQ搭建OpenWIFI
  13. 《机器学习》周志华——勘误表
  14. Tensorflow Privacy
  15. 怎么用PHP抓取百度排名?
  16. mysql官网下载官网示例sql文件
  17. LeetCode contest 199 5472. 重新排列字符串 Shuffle String
  18. 正则校验手机号是否存在3位以上豹子号或升降连号
  19. C#技巧【调用线程无法访问此对象,因为另一个线程拥有该对象的问题的解决办法】【C#读写EXCEL源码提示“office检测到此文件存在一个问题。为帮助保护您的计算机,不能打开此文件”的解决】
  20. 人物志 | 知道创宇赵伟:一个核武器的自白

热门文章

  1. GO实例3 Slice append打印
  2. Print2flash在.NET(C#)64位中的使用,即文档在线预览(转载)
  3. Win7下修改Hosts文件
  4. LeetCode(500)——键盘行(JavaScript)
  5. You may use special comments to disable some warnings. Use // eslint-disable-next-line……
  6. 句句真研—每日长难句打卡Day10
  7. JavaScript学习(十三)—节点关系
  8. html5特效 手机震动,html5 可以让用户按一下手机键盘手机震动一下吗
  9. 你第一次去丈母娘家时发生了哪些趣事?
  10. 谈一下“男”字“,女”字,怎样解析?