dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了与其它数据库的接口,本节学习dplyr包函数基本用法。dplyr()可使用%>%(链式操作),其功能是用于实现将一个函数的输出传递给下一个函数的第一个参数。注意,传递给下一个函数的第一个参数,那么下一个函数的第一个参数就不用写。

目录:

  • 筛选: filter()
  • 排列: arrange()
  • 选择: select()
  • 变形: mutate()
  • 汇总: summarise()
  • 分组: group_by()
  • 数据关连
  • bind

筛选: filter()


  • dplyr包安装及载入,使用datasets包中的mtcars数据集做演示,首先将过长的数据整理成友好的tbl_df数据:

    install.packages("dplyr")
    library(dplyr)
    mtcars_df = tbl_df(mtcars)
  • 按给定的逻辑判断筛选出符合要求的子数据集
  • 注意:只能将指定条件的观测筛选出来,为了弥补这个缺陷,可以使用select()函数筛选指定的变量,而且比subset()函数更灵活,而且选择变量的同时也可以重新命名变量。如果剔除某些变量的话,只需在变量前加上负号“-”。之所以说他比subset()函数灵活,是因为可以在select()函数传递如下参数:
    1. starts_with(x, ignor.case = TRUE)#选择以字符x开头的变量
    2. ends_with(x, ignor.case = TRUE)#选择以字符x结尾的变量
    3. contains(x, ignor.case = TRUE)#选择所有包含x的变量
    4. matches(x, ignor.case = TRUE)#选择匹配正则表达式的变量
    5. num_range('x', 1:5, width = 2)#选择x01到x05的变量
    6. one_of('x','y','z')#选择包含在声明变量中的
    7. everything()#选择所有变量,一般调整数据集中变量顺序时使用
  • > filter(mtcars_df, hp<110 & vs == 1)
    # A tibble: 10 × 11
    mpg cyl disp hp drat wt qsec vs am gear carb
    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
    1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
    2 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
    3 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
    4 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2

排列: arrange()


  • 按给定的列名依次对行进行排序:

    > a <- head(mtcars_df,2)
    > a
    # A tibble: 2 × 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
    > arrange(a,desc(wt,qsec))
    # A tibble: 2 × 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.875 17.02 0 1 4 4
    2 21 6 160 110 3.9 2.620 16.46 0 1 4 4
    > arrange(a,wt,qsec)
    # A tibble: 2 × 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

选择: select()


  • 用列名作参数来选择子数据集:

    > mtcars_df %>% select(mpg,wt,qsec)
    # A tibble: 32 × 3
    mpg wt qsec
    * <dbl> <dbl> <dbl>
    1 21.0 2.620 16.46
    2 21.0 2.875 17.02

变形: mutate()


  • 对已有列进行数据运算并添加为新列:

    > mutate(mtcars_df, NO = 1:dim(mtcars_df)[1])
    # A tibble: 32 × 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

汇总: summarise()


  • 对数据框调用其它函数进行汇总操作, 返回一维的结果:

    > summarise(mtcars, mean(disp))
    mean(disp)
    1 230.7219
    > summarise(group_by(mtcars, cyl), mean(disp))
    # A tibble: 3 × 2
    cyl `mean(disp)`
    <dbl> <dbl>
    1 4 105.1364
    2 6 183.3143
    3 8 353.1000
  • 可以用来聚合的函数有:  
    1. min():返回最小值
    2. max():返回最大值
    3. mean():返回均值
    4. sum():返回总和
    5. sd():返回标准差
    6. median():返回中位数
    7. IQR():返回四分位极差
    8. n():返回观测个数
    9. n_distinct():返回不同的观测个数
    10. first():返回第一个观测
    11. last():返回最后一个观测
    12. nth():返回n个观测

分组: group_by()


  • 当对数据集通过group_by()添加了分组信息后,mutate(),arrange() 和 summarise() 函数会自动对这些 tbl 类数据执行分组操作。

    > cars <- group_by(mtcars_df, cyl)
    > summarise(cars, count = n()) # count = n()用来计算次数
    # A tibble: 3 × 2
    cyl count
    <dbl> <int>
    1 4 11
    2 6 7
    3 8 14

数据关连


  • 数据库中经常需要将多个表进行连接操作,如左连接、右连接、内连接等,这里dplyr包也提供了数据集的连接操作,具体如下
    1. left_join(a, b, by="x1")
    2. right_join(a, b, by="x1")
    3. inner_join(a, b, by="x1")
    4. outer_join(a, b, by="x1")
    5. semi_join(a, b, by="x1") # 数据集a中能与数据集b匹配的记录
    6. anti_join(a, b, by="x1") # 数据集a中雨数据集b不匹配的记录
    7. intersect(x, y): x 和 y 的交集(按行)
    8. union(x, y): x 和 y 的并集(按行)
    9. setdiff(x, y): x 和 y 的补集 (在x中不在y中)

bind


    • 在R基础包里有cbind()函数和rbind()函数实现按列的方向进行数据合并和按行的方向进行数据合并,而在dplyr包中也添加了类似功能的函数,它们是bind_cols()函数和bind_rows()函数
    • bind_rows()函数需要两个数据框或tbl对象有相同的列数,而bind_cols()函数则需要两个数据框或tbl对象有相同的行数。
      mydf1 <- data.frame(x = c(1,2,3,4), y = c(10,20,30,40))
      mydf2 <- data.frame(x = c(5,6), y = c(50,60))
      mydf3 <- data.frame(z = c(100,200,300,400))
      bind_rows(mydf1, mydf2)
      bind_cols(mydf1, mydf3)

R(6): 数据处理包dplyr的更多相关文章

  1. R语言数据处理包dplyr、tidyr笔记

    dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了与其它数据库的接口:tidyr包的作者是Hadley ...

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

    R语言中的数据处理包dplyr.tidyr笔记   dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了 ...

  3. R语言扩展包dplyr——数据清洗和整理

    R语言扩展包dplyr——数据清洗和整理 标签: 数据R语言数据清洗数据整理 2015-01-22 18:04 7357人阅读 评论(0) 收藏 举报  分类: R Programming(11)  ...

  4. R语言数据处理利器——dplyr简介

    dplyr是由Hadley Wickham主持开发和维护的一个主要针对数据框快速计算.整合的函数包,同时提供一些常用函数的高速写法以及几个开源数据库的连接.此包是plyr包的深化功能包,其名字中的字母 ...

  5. 数据处理包dplyr的函数

    dplyr专注处理dataframe对象, 并提供更稳健的与其它数据库对象间的接口. 一.5个关键的数据处理函数: select()   返回列的子集filter()     返回行的子集arrang ...

  6. R语言扩展包dplyr笔记

    引言 2014年刚到, 就在 Feedly 订阅里看到 RStudio Blog 介绍 dplyr 包已发布 (Introducing dplyr), 此包将原本 plyr 包中的 ddply() 等 ...

  7. reshape2包--R高效数据处理包

    介绍如何使用reshape2包将宽型数据转换成长型数据,将长型数据转换成宽型数据.Reshape2是Hadley Wickham开发和维护的. 1.长数据VS宽数据 宽型数据:每列代表一个不同的变量. ...

  8. 数据处理包plyr和dplyr包的整理

    以下内容主要参照 Introducing dplyr 和 dplyr 包自带的简介 (Introduction to dplyr), 复制了原文对应代码, 并夹杂了个人理解和观点 (多附于括号内). ...

  9. R语言 ggplot2包

    R语言  ggplot2包的学习   分析数据要做的第一件事情,就是观察它.对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测? ggplot2图形之基本语法: ggplot2的核心理念是将 ...

随机推荐

  1. Linq的简介和基础知识学习

    学习LINQ之前,我们要知道LINQ是干什么,解决什么问题的,怎样学习? 一.LINQ简介 1.什么是LINQ? 什么是LINQ?LINQ中文翻译为语言集成查询(Language Integrated ...

  2. winform窗体this方式和handle(句柄)方式的区别

    我们来比较winform窗体的this方式和win32api handle方式实现窗体的最大化.默认窗体.半透明.不透明的区别 1.窗体界面设计 this方式按钮: btnMaxWindow. btn ...

  3. 对va_list; va_start ; va_end ;vsprintf理解(转)

    以下为转载内容: int printf(const char* fmt, ...) { va_list args; int i; //1.将变参转化为字符串 va_start(args,fmt); v ...

  4. 通过url获取参数信息

    运行结果如下: <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <ti ...

  5. 使用array_merge重新排列数组下标

    array_merge() 函数把两个或多个数组合并为一个数组. 如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的).如果数组是数字索引的,则键名会以连续方式重新索引. 注释:如果仅 ...

  6. C++静态成员变量和静态成员函数

    数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配 ...

  7. 结合P2P软件使用Ansible分发大文件

    一 应用场景描述 现在我需要向50+数量的服务器分发Logstash新版本的rpm包,大概220MB左右,直接使用Ansible的copy命令进行传输,命令如下: 1 ansible all  -m  ...

  8. ABP .Net Core 调用异步方法抛异常A second operation started on this context before a previous asynchronous operation completed

    1.  问题描述 最近使用ABP .Net Core框架做一个微信开发,同时采用了一个微信开发框架集成到ABP,在微信用户关注的推送事件里调用了一个async 方法,由于没有返回值,也没做任何处理,本 ...

  9. UI基础:视图控制器.屏幕旋转.MVC 分类: iOS学习-UI 2015-07-02 22:21 62人阅读 评论(0) 收藏

    UIViewController 视图控制器,继承自UIResponder,作用:管理视图并且响应事件 功能: 1.分担APPdelegate的工作 2.实现模块独立,能提高复用性 创建UIViewC ...

  10. SSH MVC

    1.MVC(Model-View-Controller)设计模式: 首先让我们了解下MVC(Model-View-Controller)的概念: MVC全名是Model View Controller ...