apply家族学习
概述
在实际的工作中,我们总要面对各种各样的数据结构处理,这些操作可以使用循环来完成,但是容易造成内存的占用,以前其实了解过这方面的函数,但是记不清,因此整理下 主要函数如下
- apply
- lapply
- sapply
- tapply
apply函数
代码语言:javascript复制apply(X, MARGIN, FUN, ...)
- X 处理的数据框
- MARGIN 1表示对行,2表示对列处理,c(1,2)表示对行列进行操作
- FUN 函数,可以为自定义函数,或者为内置函数
示例
代码语言:javascript复制# 使用iris数据集进行测试
data(iris)
# 求均值
apply(iris[,1:4],2,mean,na.rm=T)
# 结果
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.843333 3.057333 3.758000 1.199333
lapply函数
lapply函数和apply函数的差别在于,lapply输出的为一个列表 参数方面少了margin
示例
代码语言:javascript复制x<-lapply(iris[,1:4],mean,na.rm=T)
# 因为输出的为list格式,因此一般情况下需要使用unlist函数进行分解
unlist(x)
sapply函数
Sapply函数返回的是一个向量,不过增加了两个参数
- simplify 如果为T,将输出结果数组化,否则为list
- use.NAMEs 如果为T,设置字符串为字符名
示例
代码语言:javascript复制sapply(iris[,1:4],mean,na.rm=T,simplify=F,use.NAMEs=F)
# 结果
$Sepal.Length
[1] 5.843333
$Sepal.Width
[1] 3.057333
$Petal.Length
[1] 3.758
$Petal.Width
[1] 1.199333
tapply函数
tapply函数一般对数据进行分组描述时使用
代码语言:javascript复制tapply(X, INDEX, FUN = NULL)
参数
-X: 一个对象,一般都是向量
-INDEX: 一个包含分类因子的列表
-FUN: 对X里面每个元素进行操作的函数
示例
代码语言:javascript复制data(iris)
# 对第一列进行分组求均值
tapply(iris[,1],iris$Species,mean)
# 结果
setosa versicolor virginica
5.006 5.936 6.588
结束语
其实关于apply函数的家族还有很多,这里只是了解了其中几个,其他的内容用到的概率不是很高。 peace & love