plyr 包系列文章之一(a*ply)

浏览: 1766

plyr包是解决一系列常见数据分析统计问题的一组工具,需要拆分一个大数据变成均匀的片,然后对每一小片应用函数,最后把所有的结果结合在一起。

了解plyr包已经有一年多的时间了,使用当中确实被它的强大功能所折服,所以才想起写文章,不仅为了学习更多的plyr包的函数,同时也在温故而知新,如果大家想学习这方面的知识,建议可以去http://www.cnblogs.com/cloudtj/articles/5540913.html(银河统计)进行了解,它介绍的更加详细明白

欢迎大家在评论区评论我的文章,本人将及时与您互动。     

函数命名规则

                 Clipboard Image.png

这里我们可以根据函数命名识别其功能

输入类型和输出类型:a=array,d=data frame,l=list,_表示输出放弃。第一个字母表示输入,第二个字母表示输出。

例如 aaply,即对每个array数组的片段应用函数,最后得到的结果也是以array数组的形式呈现 

a*ply系列函数

我们将对主要函数进行一一讲解,考虑到函数较多,一篇文章的介绍篇幅不能满足,所以接下来我将以系列文章来介绍这些函数,并按照行顺序进行介绍,话不多说直接进入今天的主题,先介绍a*ply函数

  Clipboard Image.png

aaply函数

 aaply(.data, .margins, .fun = NULL, ...,.expand = TRUE,.progress = "none", .inform = FALSE, .drop = TRUE, .parallel =FALSE, .paropts = NULL)

.data 表示要处理的数据集,有时直接传递dataframe会报错,转换为矩阵就OK

.margins 表示切割的维度,1表示按行切割,2表示列,c(1,2)表示按行列组合进行切割,若是三维数组,3表示按高度切割

.fun :要应用的函数

# 获取数据
library(plyr)
mydata<-as.matrix(iris[c(1:4),c(1:4)]) 
head(mydata)
# 按行求平均值
t<-aaply(.data = mydata,.margins = 1,.fun = mean)
t
typeof(t)  # t的数据类型是数字array
# 按列求平均值
aaply(mydata, 2, mean)
# 针对高维数组进行计算,ozone是一个长宽高24*24*72的数据集,现在截取一部分数据分析便于观察
df<-ozone[1:2,1:2,1:2]
df
# 按高度进行切割
aaply(df, 3, mean)
# 按行列进行切割
apply(df,c(1,2),mean)
# 求各行的最大值和最小值
aaply(df, 1, each(min, max))

部分输出结果

Clipboard Image.png


adply函数

aaply(.data, .margins, .fun = NULL, ...,.expand = TRUE, .progress = "none", .inform = FALSE, .drop = TRUE, .parallel =FALSE, .paropts = NULL.id = NA)

.data表示要处理的数据集,有时直接传递dataframe会报错,转换为矩阵就OK

.margins 表示切割的维度,1表示按行切割,2表示列,c(1,2)表示按行列组合进行切割,若是三维数组,3表示按高度切割

.fun :要应用的函数

 ##adply函数介绍
# 按行求平均值
t<-adply(mydata,1,mean)
# 此时t 是dataframe
str(t)
# 按列求平均值
adply(mydata,2,mean)

输出结果:

Clipboard Image.png


alply函数

aaply(.data, .margins, .fun = NULL, ...,.expand = TRUE,

 .progress = "none", .inform = FALSE, .drop = TRUE, .parallel =FALSE,

 .paropts = NULL.id = NA)

.data表示要处理的数据集,有时直接传递dataframe会报错,转换为矩阵就OK

.margins 表示切割的维度,1表示按行切割,2表示列,c(1,2)表示按行列组合进行切割,若是三维数组,3表示按高度切割

.fun :要应用的函数

##alply函数介绍
# 针对高维数组进行计算,ozone是一个长宽高24*24*72的数据集,现在截取一部分数据分析便于观察
df<-ozone[1:10,1:10,1:2]
df
# 按高度求每个高度上的四分位数
alply(df, 3, quantile)

部分输出结果,可以看到这里是以list列表形式进行输出的

Clipboard Image.png


a_ply函数

a_ply(.data, .margins, .fun = NULL, ...,.expand = TRUE,

 .progress = "none", .inform = FALSE, .print = FALSE,

 .parallel = FALSE, .paropts = NULL)

.data表示要处理的数据集,有时直接传递dataframe会报错,转换为矩阵就OK

.margins 表示切割的维度,1表示按行切割,2表示列,c(1,2)表示按行列组合进行切割,若是三维数组,3表示按高度切割

.fun :要应用的函数

这个函数的输出是被丢弃的,只计算无输出

library(plyr)
mydata<-as.matrix(iris[c(1:4),c(1:4)])
t<-a_ply(mydata, 1, mean)
t

Clipboard Image.png

欢迎大家在评论区评论我的文章,本人将及时与您互动。  

推荐 0
本文由 Smurf.... 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册