登录
首页精彩阅读R语言apply族函数详解
R语言apply族函数详解
2017-02-23
收藏

R语言apply族函数详解

R语言中,apply系列函数的基本作用是对数组(array,可以是多维)或者列表(list)按照元素或元素构成的子集合进行迭代,并将当前元素或子集合作为参数调用某个指定函数。apply族函数分别有apply函数,tapply函数,lapply函数,mapply函数。每一个函数都有自己的特点,在处理不同类型的数据可以选用相对应的函数。apply族函数分别有apply函数,tapply函数,lapply函数,mapply函数。每一个函数都有自己的特点,在处理不同类型的数据可以选用相对应的函数。

1、 apply函数
      apply函数只能用于处理矩阵类型的数据,也就是说所有的数据必须是同一类型。因此要使用apply函数的话,需要将数据类型转换成矩阵类型。
apply函数一般有三个参数,第一个参数代表矩阵对象,第二个参数代表要操作矩阵的维度,1表示对行进行处理,2表示对列进行处理。第三个参数就是处理数据的函数。apply会分别一行或一列处理该矩阵的数据。
 
[plain] view plain copy 在CODE上查看代码片派生到我的代码片
a<-matrix(1:12,nrow=3)  
a  
#求每列的平均值  
apply(a,2,mean)  
其中a是一个3*4的矩阵,如下。运行结果为 2  5  8 11
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
       我们也可以使用colMeans(),rowMeans( ),对矩阵的列和行分别求平均值,rowSums( ),colSums(),,对矩阵的列和行分别求和。
如过数据中NA,那么在求行列的平均值或和的时候,NA所在的行列的计算结果也没NA。
[plain] view plain copy 在CODE上查看代码片派生到我的代码片
apply(a,1,mean,na.rm=TRUE)  
这样的话,它会自动忽略NA,只计算其他不是NA的值。rowMeans( )中也可以添加na.rm=TRUE参数。效果相同。
[plain] view plain copy 在CODE上查看代码片派生到我的代码片
#矩阵中添加了一个na  
a[2,1]<-NA  
#不计算NA存在的那一行或那一列  
apply(a,1,mean)  
这个时候矩阵为
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]   NA    5    8   11
[3,]    3    6    9   12
     结果为[1] 5.5  NA 7.5。如果代码写成下面这个样子
[plain] view plain copy 在CODE上查看代码片派生到我的代码片
apply(a,1,mean,na.rm=TRUE)  
结果为 5.5 8.0 7.5

2、lapply和sapply函数
       lapply和sapply函数可以用于处理列表数据和向量数据(vector/list)。lapply函数得到处理得到的数据类型是列表,而sapply函数得到处理的数据类型是向量。这两个函数除了在返回值类型不同外,其他方面基本完全一样。

3、tapply函数
       它通常会有三个参数,第一个参数代表数据,第二个参数表示如何对数据进行分组操作,第三个参数指定每一个分组内应用什么函数。也就是说tapply函数就是把数据按照一定方式分成不同的组,再在每一组数据内进行某种运算。

4、mapply函数
         mapply函数主要是对多个列表或者向量参数使用函数


数据分析咨询请扫描二维码

客服在线
立即咨询