plyr包是解决一系列常见数据分析统计问题的一组工具,需要拆分一个大数据变成均匀的片,然后对每一小片应用函数,最后把所有的结果结合在一起。
了解plyr包已经有一年多的时间了,使用当中确实被它的强大功能所折服,所以才想起写文章,不仅为了学习更多的plyr包的函数,同时也在温故而知新,如果大家想学习这方面的知识,建议可以去http://www.cnblogs.com/cloudtj/articles/5540913.html(银河统计)进行了解,它介绍的更加详细明白
欢迎大家在评论区评论我的文章,本人将及时与您互动。
函数命名规则
这里我们可以根据函数命名识别其功能
输入类型和输出类型:a=array,d=data frame,l=list,_表示输出放弃。第一个字母表示输入,第二个字母表示输出。
例如 aaply,即对每个array数组的片段应用函数,最后得到的结果也是以array数组的形式呈现
a*ply系列函数
我们将对主要函数进行一一讲解,考虑到函数较多,一篇文章的介绍篇幅不能满足,所以接下来我将以系列文章来介绍这些函数,并按照行顺序进行介绍,话不多说直接进入今天的主题,先介绍a*ply函数
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))
部分输出结果
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)
输出结果:
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列表形式进行输出的
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
欢迎大家在评论区评论我的文章,本人将及时与您互动。