R海拾遗-apply家族学习

2020-09-15 12:24:35 浏览数 (4)

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

1 人点赞