duang,duang!Erin又上线为大家分享干货来了。
最近Erin在做信用风险评级模型的开发,几千行的代码敲的我头晕眼花。作为一个懒癌晚期,并且追求高效率的数据er,怎么能受得了浪费时间去造轮子呢。接下来,我就为大家分享几个我在工作当中最常用来做数据分析用到的包,dplyr和data.table,我保证你get到这两个包后,就再也不想用R里面自带的基础包函数进行数据分析了!!(贼笑中)

dplyr包

R语言中最为重要的包(之一)!
它可以让数据分析功能更加强大,代码更加简洁。你可以随心所欲的操作它,使用它获取你想要的数据,而且它的语法非常简单,非常直白。在编程语言里面,说语法简单,意味着编程语言与我们正常人的逻辑思维是一致的。它相对于R自带的筛选方法会更高效,我们不需要花很多时间去等待机器反应。
我工作当中,或者是公认的最常用的方法,无非就是下面几种:
① 数据过滤
② 数据选择
③ 数据排序
④ 数据转换
⑤ 数据分组
⑥ 数据抽样

大家做数据分析,会发现90%的时间都在与这几个打交道。dplyr很庆幸,都提供了关于常用方法的一些函数。
在GitHub上面,之前有人做了一个统计,以下几个函数最为常用:

filter( ) 过滤

filter(df,cond1,cond2,…) 用逗号,隔开表示条件是and的关系
filter(df,cond1|cond2|…) 用竖线|隔开表示条件是or的关系
slice(df,80:100) 选取索引80到100的数据

arrange( ) 对数据框进行排序

arrange(df,V1,desc(V2),V3) 对V1,V3升序排序,对V2降序排序

※arrange的语法非常简单,功能也很强大,我们再也不要用order()函数了

select( ) 选择列

select(df,V1,V2,V3) 选择V1,V2,V3列数据
select(df,V1:V3) 选择V1到V3列的所有数据
t<-select(df,-c(V1,V3)) 选择除了V1,V3以外的所有列

distinct( ) 去重

distinct(df,V1,V2) 根据V1和V2两个条件来进行去重

在基础包里面也有一个去重函数unique()
※注意distinct()可以针对某些列进行去重,而unique()只能对整个数据框进行去重。

mutate( ) 为数据增加新列

mutate(df,vnew1=v1-v2,vnew2=vnew1+v3)

与基础包里的transform()函数接近,但mutate可以使用你刚刚创建的column,
transform则不行,会报错:”找不到对象vnew”

summarise( ) 计算统计数据

summarise(df,sum(v1))

sample_n(df,1000) 随机抽取1000条数据
sample_frac(df,0.7) 随机抽取70%的数据

看了以上这几个函数,是不是觉得dplyr包超简单!对!我们要的就是简洁简单!有这么好的作者给你开发了这么好的packages,你就放心大胆的用呗,不用自己去写基础代码造轮子的事,多好!!找到合适的packages并学习使用它,绝对会让我们数据分析工作事半功倍!

我们有没有发现dylyr包中函数使用的一些规律?
有的!
①第一个参数都是数据集df
②查询条件都是关于如何操作数据集的,在列上面进行操作
③返回的都是新的数据集,不会改变原始数据集

在介绍下一个包之前,我们先来引入一个dplyr包的综合运用:

grouped<-group_by(df,v1,V2) #df被v1,v2进行分组
newdata<-summarise(grouped,mean_age=mean(age),sum_sale=sum(sales))

以上这段代码我们使用group_by和summarise的结合实现了对数据集分组分析,并进行统计量计算的一个功能。学习了下面的data.table包以后,你再回来看看这个,你绝对不会选择这种写法并且超级鄙视它!

data.table包

dplyr已经可以满足我们数据分析工作中大部分的需求,后来该包的作者又开发了一个炫酷吊炸天的包“data.table”
如果你的日常处理数据在几万到十几万行,那么用dplyr就完全足够了。
如果你的日常处理数据量非常大,有上亿行的数据处理需求,这个时候你完全可以放心大胆的使用data.table
这个包异常的高效,速度非常的快!!
官网上面有关于data.table包对于dplyr的提升和改进:

作为课代表的我来帮大家简单的总结一下:
我们都知道R有个令人诟病的缺点就是跑起来耗内存,data.table相对于dplyr
更快、更节省内存了!data.table这个包的语法用起来稍微有点奇怪(哈哈~),
但是速度亲妈快啊!!小伙伴们一定不能错过的绝世好包

铺垫了这么多,来来来,数据分析神器data.table走起来!!

还是那句话,讲几个最常用的函数,就算你的数据量大到逆天,data.table跑起来都是游刃有余的。剩下的大家有什么特殊需求再去下载官方文档看就好啦!

DT<-data.table()
DT[i,j,by]
take DT,subset rows using i,then calculate j grouped by by
我们在横轴上过滤数据,用by进行分组,然后在列上面进行计算。

使用i

DT[3:5] #选取3到5行的数据
class(DT)
[1] "data.table" "data.frame"
DT[v1=="A"] #基于条件的选择
DT[v1 %in% c("A","B")]

使用j

DT[,v1] #选择v1列

那如果我要选择多列呢,大家注意一下这里不是用c()来选取了,
而是通过.()来选取,注意前面有一个”.”号,所以我说data.table的语法有点奇怪呢。

DT[,.(v1,v3)]
#在j上调用函数
DT[,sum(v1)]
DT[,.(sum(v1),sd(v3))]

data.table居然支持直接在j上进行列的计算,看到这里是不是觉得超牛逼,关键是代码非常简洁,一句话的事,就帮我们完成数据的筛选和计算了!

DT[,.(sum_v1=sum(v1),sd_v3=sd(v3))]

还可以直接给计算的列赋予名称哦!!功能强大得我都要笑开花了!

使用by

这还只是小试牛刀,你忘了我们还有个by吗!!

DT[,.(mean_age=mean(age),sum_sale=sum(sales)),by=.(v1,v2)]

回顾一下我们在上一节最后保留的一段代码:

group_by()
grouped<-group_by(df,v1,V2) #data被v1,v2进行分组
newdata<-summarise(grouped,mean_age=mean(age),sum_sale=sum(sales))

以上两段代码的效果是等同的!data.table把我们刚刚用group_by和summarise组合才能实现的功能,直接在一句代码里面就实现了,而且代码的可读性和可扩展运用性非常强!

以上讲的这些只是我工作中data.table用得最多的功能,它的强大之处还远远不止这些!如果你想深入,可以去官网下载文档,你绝对值得拥有!(反正我用了data.table以后就再也不想用R里面基础包自带的函数了,今天就黑到这里,匿了~)

——Copyright Reserved by Erin

懒癌必备-dplyr和data.table让你的数据分析事半功倍相关推荐

  1. dplyr和data.table让你的数据分析事半功倍

    dplyr和data.table让你的数据分析事半功倍 原创 2017年08月06日 12:32:40 标签: R语言 / 数据分析 / dplyr / data-table 710 duang,du ...

  2. R语言︱数据集分组、筛选(plit – apply – combine模式、dplyr、data.table)

    R语言︱数据集分组 大型数据集通常是高度结构化的,结构使得我们可以按不同的方式分组,有时候我们需要关注单个组的数据片断,有时需要聚合不同组内的信息,并相互比较. 一.日期分组 1.关于时间的包都有很多 ...

  3. R︱高效数据操作——data.table包(实战心得、dplyr对比、key灵活用法、数据合并)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 由于业务中接触的数据量很大,于是不得不转战开始 ...

  4. R语言进行缺失值填充(Filling in missing values):使用R原生方法、data.table、dplyr等方案

    R语言进行缺失值填充(Filling in missing values):使用R原生方法.data.table.dplyr等方案 目录 R语言进行缺失值填充&#x

  5. R语言进行dataframe数据内连接(Inner join):使用R原生方法、data.table、dplyr等方案

    R语言进行dataframe数据内连接(Inner join):使用R原生方法.data.table.dplyr等方案 目录 R语言进行dataframe数据内连接(Inner join):使用R原生 ...

  6. R语言为dataframe添加新的数据列(add new columns):使用R原生方法、data.table、dplyr等方案

    R语言为dataframe添加新的数据列(add new columns):使用R原生方法.data.table.dplyr等方案 目录 R语言为dataframe

  7. R语言为dataframe添加新的数据列(横向拼接、Appending columns,Unioning columns):使用R原生方法、data.table、dplyr等方案

    R语言为dataframe添加新的数据列(横向拼接.Appending columns,Unioning columns):使用R原生方法.data.table.dplyr等方案 目录 R语言为dat

  8. R语言对dataframe的行数据进行排序(Ordering rows)实战:使用R原生方法、data.table、dplyr等方案

    R语言对dataframe的行数据进行排序(Ordering rows)实战:使用R原生方法.data.table.dplyr等方案 目录

  9. R语言对dataframe进行行数据筛选(row selection)多种方案:使用R原生方法、data.table、dplyr等方案

    R语言对dataframe进行行数据筛选(row selection)多种方案:使用R原生方法.data.table.dplyr等方案 目录

最新文章

  1. PCL中点云的超体素(SuperVoxel)
  2. 自从用完 Gradle 后,有点嫌弃 Maven 了!
  3. 解决Ext JS 4.1版本Tree在刷新时选择第一行的问题
  4. 为什么不需要对独立的jre进行环境变量配置
  5. 科达南沙电子警察“扩编”
  6. oracle 如何显示 比例,Oracle中如何兼得比例和时间
  7. 【LOJ166】拉格朗日插值2【拉格朗日插值】【NTT卷积】
  8. 高性能mysql看不懂_高性能mysql笔记1
  9. php最新版本的安装,centos安装新PHP版本
  10. mysql创建gbk库_MYSQL创建utf-8和GBK格式数据库
  11. windows server2012在已有.net4.5框架的基础上安装.net3.5的方法
  12. 36.session
  13. 记一次mykings暗云挖矿木马的排查与解决
  14. 机房搬迁的一般步骤方案
  15. 六、假设检验:使用Python进行两个正态总体均值的假设检验
  16. 万能科学计算机app,万能科学计算器
  17. hadoop 清理日志文件
  18. 用Java代码编程实现模拟机器人对话
  19. 按键精灵--函数的介绍
  20. [专业课笔记] 单片机 第三章 指令系统

热门文章

  1. 塔科夫为什么远程服务器返回错误,逃离塔科夫登陆错误解决教程
  2. openssl RSA 内存读取密钥
  3. 【密码学-凯撒密码】
  4. 猛犸Winform分页控件
  5. Windows 工具栏ToolBar
  6. matlab逐步积分,第17章 隐式逐步积分法.ppt
  7. 都有哪些语言是跨平台的?
  8. 2013渣打编程马拉松赛天津初赛总结
  9. mysql安装完为什么打不开_mysql安装打不开怎么办
  10. GLES2.0中文API-glTexParameter