RStudio Blog 介绍dplyr 包已发布 (Introducing dplyr), 此包将原本 plyr 包中的 ddply() 等函数进一步分离强化, 专注接受dataframe对象, 大幅提高了速度, 并且提供了更稳健的与其它数据库对象间的接口,还是Hadley Wickham 的新作, 并自称 a grammar of data manipulation。 由此看来,dplyr包是plyr包的加强版。

初始化安装

install.packages("dplyr")  

数据集类型

将过长过大的数据集转换为显示更友好的 tbl_df 类型:

hflights_df <- tbl_df(hflights)

可以 hflights_df 感受一下不再被刷屏的感觉.

五种常用的基本操作

测试数据集

library(data.table)
CARS = data.table(cars)
X=data.table(speed=c(4,7,8),type=c("small","middle","large"))
dt <- CARS[X,on='speed']
tables() dt
# speed dist type
# 1: 4 2 small
# 2: 4 10 small
# 3: 7 4 middle
# 4: 7 22 middle
# 5: 8 16 large

1、筛选: filter() 按给定的逻辑判断筛选出符合要求的子数据集, 类似于 base::subset() 函数 例如:

# 滤过行
filter(dt,speed %in% c(4,7))
filter(dt,speed==4|speed==7) 注意: 表示 AND 时要使用 & 而避免 &&

2、排列: arrange()

arrange(dt,dist,desc(speed))

3、选择: select()

starts_with(x,ignor.case = TRUE) # 选择以字符x开头的变量 
ends_with(x,ignore.case = TRUE) # 选择以字符x结尾的变量 
contains(x,ignore.case = TRUE) #选择所有包含x的变量 
matches(x,ignore.case = TRUE) #选择匹配正则表达式的变量 
num_range(“x”,1:5,width = 2) #选择从x01到x05的数值型变量 
one_of(“x”,”y”,”z”) #选择包含在声明变量中的变量 
everything() #选择所有变量,一般调整数据集中变量顺序时使用

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

select(dt,speed)

还可以用 : 来连接列名, 没错, 就是把列名当作数字一样使用:
select(dt,speed:dist) 用 - 来排除列名:
select(dt,-dist) 同样类似于R自带的 subset() 函数 (但不用再写一长串的 c("colname1", "colname2") 或者 which(colname(data) == "colname3"), 甚至还要去查找列号)

4、变形: mutate() 对已有列进行数据运算并添加为新列:

mutate(dt,total=speed+2)

5、汇总: summarise()

对数据框调用其它函数进行汇总操作, 返回一维的结果:
summarise(dt, delay = mean(dist, na.rm = TRUE))
 等同于 plyr::summarise(), 原文说该函数功能尚不是非常有用, 大概以后的更新会加强吧.

分组动作 group_by()

以上5个动词函数已经很方便了, 但是当它们跟分组操作这个概念结合起来时, 那才叫真正的强大! 当对数据集通过 group_by() 添加了分组信息后,mutate(), arrange() 和 summarise() 函数会自动对这些 tbl 类数据执行分组操作 (R语言泛型函数的优势).

另: 一些汇总时的小函数

n(): 计算个数 n_distinct(): 计算 x 中唯一值的个数. (原文为 count_distinct(x), 测试无用) first(x), last(x) 和 nth(x, n): 返回对应秩的值, 类似于自带函数 x[1], x[length(x)], 和 x[n] 注意: 分组计算得到的统计量要清楚样本已经发生了变化, 此时的中位数是不可靠的

n_distinct(select(dt,speed))
summarise(group_by(dt,type),total=sum(dist))

连接符 %>% 包里还新引进了一个操作符, 使用时把数据名作为开头, 然后依次对此数据进行多步操作.

比如:
Batting %>%    group_by(playerID) %>%    summarise(total = sum(G)) %>%    arrange(desc(total)) %>%   head(5)

这样可以按进行数据处理时的思路写代码, 一步步深入, 既易写又易读, 接近于从左到右的自然语言顺序, 对比一下用R自带函数实现的:

head(arrange(summarise(group_by(Batting, playerID), total = sum(G)) , desc(total)), 5)

还可以通过src_postgres 映射数据库   tbl 映射数据库表,就相当于在sql端处理数据,提高一定的性能  

 

借鉴原文

dplyr快速入门的更多相关文章

  1. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  2. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  3. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  4. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  5. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  7. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  8. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  9. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. DelphiXE8怎么使用调试模式(小米手机2)

    需求:在开发Android程序时,大家一直是使用ShowMessage.其实XE是支持下断点的. 操作:小米手机2: 1.小米手机2用USB线,连到电脑上. 2.小米手机2-设置-关于手机-" ...

  2. c# 常用操作保留

    RanDom如何提高生成随机数的随机性 一个在线考试系统的项目,需要从题库中随机抽取试题,但是如果直接 Random ran=new Randon(),ran.Next(nummin,nummax); ...

  3. 使用WinSCP这个软件使linux和win7互传文件

    使用这个软件之前首先win7要可以ping通linux系统,且linux要开启,关机可不能通啊!!!!!!!!! 双击这个快捷方式 主机名写ip地址 我们可以将虚拟机上的文件下载下来进行使用 也可以将 ...

  4. Qt类反射机制

    前言   如何通过类名动态的创建对象(类反射),对于Java开发者来说一点也不陌生,当然Qt也提供了一个元对象系统(The Meta-Object System),通过这个系统我们可以动态的在运行时获 ...

  5. IPC之SystemV

    svipc - System V interprocess communication mechanisms linux实现的System V interprocess communication ( ...

  6. how to identify your .NET Framework version

    scenario: when I try to install github-windows on my PC, got such error "lower .NET Framework V ...

  7. android Bitmap用法总结(转载)

    Bitmap用法总结1.Drawable → Bitmappublic static Bitmap drawableToBitmap(Drawable drawable) {Bitmap bitmap ...

  8. CI框架整合微信公共平台接口

    #CI框架控制器 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /*** CI框架整合微信 ...

  9. 苹果mac版微软官方远程连接工具下载Microsoft Remote Desktop For Mac

    官网beta版本,不用再到处找包了. ** 点我访问https://rink.hockeyapp.net/apps/5e0c144289a51fca2d3bfa39ce7f2b06/**

  10. SVD分解与数据压缩

    SVD的几何解释:http://blog.csdn.net/dinosoft/article/details/37884597 上文未证明为什么AAT的特征向量就是要找的v 这里有个简单的说明: SV ...