• plyr包简介

plyr包是Hadley Wickham为解决split – apply – combine问题而写的一个包,其动机在与提供超越for循环和内置的apply函数族的一个一揽子解决方案。使用plyr包可以针对不同的数据类型,在一个函数内同时完成split – apply – combine三个步骤,以实现最大限度的高效和简洁。
plyr包特别适合处理大型数据集问题,比如对空间数据的空间位置或时间序列面板数据的时间点建模,或者在高维数组中进行数据探索等等。

此包作者Hadley Wickham可以说是R社区的一位大神级的人物。他先后写出了17个R包,包括目前统计图形方面的大热门ggplot2。作者自述其研究兴趣在于发展使数据分析变简单的工具特别是超越传统统计的数据清理,组织和探索方法。

为说明plyr包的特点和优势所在,下面看两个例子:

(1)对于简单的问题,plyr和apply函数的效果差不多
> m<-matrix(c(1:4,1,4,1:6),ncol=3)
> apply(m,1,mean)
[1] 1.666667 3.333333 3.000000 4.000000
> aaply(m,1,mean)
       1 2 3 4
1.666667 3.333333 3.000000 4.000000

(2)下面来个复杂点的
取鸢尾花iris数据集,对每一种花,建立一个线性回归模型,并给出结果。

> attach(iris)
> head(iris)
 Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa

建立回归方程,
model <- function(x){ lm(Speal.Length~Speal.Width, data=x)}
使用apply函数族,需要分割,计算和合并(最少需要三个语句):
> pieces <- split(iris,list(iris$Species))
> models <- lapply(pieces,model)
#这两句也可替代为models<- by(iris[, 1:4], Species, model)
> result <- lapply(models,coef)
> do.call('rbind',result)

用pylr包只需要两句:
> result1 <- dlply(iris,.(Species),model)
> result2 <- ldply(result1,function(x) coef(x))

至于for语句,就不用写了吧,地方不够。

  • pylr包的使用

(1)命名规则
pylr的基本函数集如下(根据1.7.1版):

命名规则:前三行是基本类型。
根据输入类型和输出类型:a=array,d=data frame,l=list,_表示输出放弃。第一个字母表示输入,第2个字母表示输出。
后两行是对应apply族的replicates和mapply这两个函数,分别表示n次重复和多元函数参数的情况,第2个字母还是表示输出类型。
从命名特点来看,我们不需要列出每个函数的情况了,只要从输入和输出两方面分别讨论即可。

(2)参数说明

这些函数有两到三个主要的参数,依赖于输入的类型:
. a*ply( .data, .margins, .fun, ..., .progress = "none")
. d*ply( .data, .variables, .fun, ..., .progress = "none")
. l*ply( .data, .fun, ..., .progress = "none")
参数.data是我们要用来分片-计算-合并的;参数.margins或者.variables描述了分片的方式;
参数.fun表示用来处理的函数,其它更多的参数是传递给处理函数的;参数.progress用来控制显示一个进度条。

(3)输入

输入类型有三种,每一种类型给出了如何进行分片的不同方法。
简单来说:
a*ply( ):数组(包括矩阵和向量)按维数分为低维的片。
d*ply( ):数据框被变量组合分成子集。
l*ply( ):列表的每个元素就是一个分片。

因此,对输入数据集的分片,不是取决于数据的结构,而是取决于所采用的方法。
一个对象采用a*ply( )分片必须对应dim( )且接受多维的索引;采用d*ply( )分片,要利用split( )并强制转换为列表;采用l*ply( ),需要用length() and [。
所以数据框可以被传递给a*ply( ),可以象2维的矩阵那样处理,也可以传递给l*ply( ),被视为一个向量的列表。

三种类型各自的特点:
(a): 输入数组(a*ply( ))
a*ply( )的分片特点在于.margins参数,它和apply很相似。
对于2维数组,.margins可以取1,2,或者c(1:2),对应2维数组的3种分片方式。
如图,

对于3维数组,则有7种分片方式:

.margins对应更高维的情况,可能会面临一种爆发式的组合。

(b)输入数据框(d*ply( ))

使用d*ply时,需要特别指定分组所用的变量或变量函数,它们会被首先计算,然后才是整个数据框。
有下面几种指定方式:
• .(var1)。按照变量var1的值来对数据框分组
•多重变量 .(a,b,c)。将按照三个变量的交互值来分组。

这种形式输出的时候,有点复杂。如果输出为数组,则数组会有三个维度,分别以a,b,c的值作为维数名。如果输出为数据框,将会包含a,b,c取值的三个额外的列。如果输出为列表,则列表元素名为按周期分割的a,b,c的值。

•作为列名的字符向量:c("var1", "var2")。
•公式~ var1 + var2。

(c)输入列表(l*ply( ))
l*ply( )不需要描述如何分片的函数,因为列表本身就是按照元素的分划。使用l*ply( )相当于a*ply( )作用于一维数组的效果。

原文:http://site.douban.com/182577/widget/notes/10567181/note/246634257/

及其他几篇综合

R语言数据转换——plyr包相关推荐

  1. R语言的plyr包简介

    (转载地址)http://www.jianshu.com/p/bfddfe29aa39 R语言的plyr包简介 字数3040 阅读2875 评论3 喜欢7 R语言中的类SQL操作 plyr包可以进行类 ...

  2. r语言必学的十个包肖凯_30 天学会R DAY 14:R语言必学包dplyr

    原标题:30 天学会R DAY 14:R语言必学包dplyr 第14天 R语言必学包dplyr R语言非常讲究数据的整理,我们在7-13天的R语言学习内容中,着重都是关于R语言的整理,各种方法对数据进 ...

  3. R语言︱H2o深度学习的一些R语言实践——H2o包

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言H2o包的几个应用案例 笔者寄语:受启发 ...

  4. 三线表是什么?R语言使用table1包绘制(生成)三线表、构建不分层的三线表

    三线表是什么?R语言使用table1包绘制(生成)三线表.构建不分层的三线表 目录

  5. R语言使用psych包进行探索性因子分析EFA、使用cov2cor函数将原始数据的协方差矩阵将其转换为相关性矩阵( covariance matrix into correlation matrix)

    R语言使用psych包进行探索性因子分析EFA.使用cov2cor函数将原始数据的协方差矩阵将其转换为相关性矩阵( covariance matrix transform into correlati ...

  6. R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义函数在三线表中添加p值

    R语言使用table1包绘制(生成)三线表.使用单变量分列构建三线表.编写自定义函数在三线表中添加p值 目录

  7. R语言使用caret包构建遗传算法树模型(Tree Models from Genetic Algorithms )构建回归模型、通过method参数指定算法名称

    R语言使用caret包构建遗传算法树模型(Tree Models from Genetic Algorithms  )构建回归模型.通过method参数指定算法名称.通过trainControl函数控 ...

  8. R语言使用DALEX包的model_profile函数对caret包生成的多个算法模型的离散变量进行分析、使用偏依赖图(Partial Dependence Plots)解释某个离散特征和目标y的关系

    R语言使用DALEX包的model_profile函数对caret包生成的多个算法模型的离散变量进行分析.使用偏依赖图(Partial Dependence Plots)解释某个离散特征和目标值y的关 ...

  9. R语言使用timeROC包计算存在竞争情况下的生存资料多个标记物在相同时间下的cox及协变量分析AUC值、并可视化多个标记物在相同时间下的ROC值、多指标的ROC曲线(Time-dependent R

    R语言使用timeROC包计算存在竞争情况下的生存资料多个标记物在相同时间下的cox及协变量分析AUC值.并可视化多个标记物在相同时间下的ROC值.多指标的ROC曲线(Time-dependent R ...

最新文章

  1. 数据结构(C语言实现》课后1-5章习题答案
  2. 重置npm设置_密码重置用户流程4部曲
  3. 【自动驾驶】7. MDC常用术语、DDS、SOME/IP
  4. 终端服务器超过了 最大连接数
  5. tableau使用_使用Tableau探索墨尔本房地产市场
  6. 最小生成树——Prim(普利姆)算法
  7. windows2008开机占用多少内存_如何提升电脑开机速度?
  8. 解析函數論 Page 28 連續復變函數的最簡單的性質
  9. PL/SQL Developer 登录 Oracle 12c和Win10下安装Oracle 11g
  10. 如何用纯 CSS 创作 404 文字变形为 NON 文字的交互特效
  11. bzoj-1488 图的同构
  12. 楚留香服务器维护,楚留香3月30日更新维护公告 楚留香手游更新内容一览
  13. 什么是服务器?服务器是干什么用的?
  14. 巴马冷泉、巴马水到底是个什么?有市场吗?
  15. web网页设计期末课程大作业——简单的学生网页作业源码 基于HTML仿唯品会电商项目的设计与实现
  16. 圣诞节,描述京东 Merry Christmas
  17. 微信小程序背景图真机显示不了
  18. 几款主流数据库的详细比较
  19. PrinTao CANON Home Studio Edition 8.0r12 17 Mac 佳能专业打印软件
  20. VUE报错You are using the runtime-only build of Vue where the template compiler is not available

热门文章

  1. Tomcat打包时多项目共享jar和精确指定jar版本
  2. Silverlight 应用 WCF RIA Services 在 IIS6 部署问题总结
  3. Linux (Ubuntu/deepin等)终端命令安装Lamp
  4. EL表达式 jsp2.0 jsp1.2 与 tomcat
  5. JQuery中的API--操作DOM
  6. kotlin和java差别_Kotlin和Java的常用方法的区别总结
  7. java swing运行没反应_java – 无法从命令行运行swing
  8. oracle nowday,Java MonthDay now()用法及代码示例
  9. linux下pcre编译,linux下交叉编译lighttpd以及pcre
  10. 武科大计算机网络课程设计,【川大】计算机网络课程设计9013,奥鹏2017