R语言:apply族函数(一)

apply函数族的函数对数组(二维或者多维)或者矩阵的某个子集进行行、列或者第三维的迭代操作,返回相关结果。

apply函数族有apply,lapply,sapply,tapply,mapply等等函数,每一个函数都有自己特有的功能。

1 apply

用法:apply(array, margin, fun,...)  margin=1,2,3,...,通过fun函数对行(margin=1)、列(margin=2)或者第三维(margin=3)进行统计。也可以添加其它参数,如na.rm=TRUE会去掉数据为NA的项在进行统计。

> a <- array(c(1:24),dim=c(2,3,4))
> a
, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

     [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12

, , 3

     [,1] [,2] [,3]
[1,]   13   15   17
[2,]   14   16   18

, , 4

     [,1] [,2] [,3]
[1,]   19   21   23
[2,]   20   22   24

> apply(a,1,sum)  #按行统计数据总和
[1] 144 156
> apply(a,2,sum)  #按列统计数据总和
[1]  84 100 116
> apply(a,3,sum)  #这里array是三维,按照第三维度统计总和
[1]  21  57  93 129

2 lapply

    lapply(list,fun,...)    lapply对list每列或者vector进行操作,返回list对象

> b <- list(x=1:24,y=25:48) 
> b
$x
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

$y
 [1] 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48

> lapply(b,mean)
$x
[1] 12.5

$y
[1] 36.5

> lapply(b,function(x)x+3)
$x
 [1]  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

$y
 [1] 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

3 sapply

sapply(list, fun,simplify=TRUE)    ,跟lapply函数类似使用,也是处理列表或者向量数据,它和lapply函数不同之处在于其返回的是向量,若返回结果长度大于1则返回matrix。若simplify=FALSE则返回list,跟lapply函数一样。

> b <- list(x=1:24,y=25:48) 
> sapply(b,mean)
   x    y 
12.5 36.5 
> sapply(b,mean,simplify=FALSE)
$x
[1] 12.5

$y
[1] 36.5

> sapply(b,function(x)x+3)[1:5,]
     x  y
[1,] 4 28
[2,] 5 29
[3,] 6 30
[4,] 7 31
[5,] 8 32

4 tapply

 tapply 对向量进行分组统计

使用方法:tapply(vector, indices, fun)

> fac <- factor(rep(1:4,length=24),levels=1:6)
> fac
 [1] 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
Levels: 1 2 3 4 5 6
> tapply(1:24,fac,sum)
 1  2  3  4  5  6 
66 72 78 84 NA NA

5 mapply

mapply函数在fun后可以接受多个数据,fun分别利用这些数据的第一个元素进行统计返回,再利用第二个元素统计返回,直到没有元素了为止,返回列表结果。

> mapply(sum,1:10,11:20)
 [1] 12 14 16 18 20 22 24 26 28 30
> mapply(function(x,y)x+y,1:10,11:20)
 [1] 12 14 16 18 20 22 24 26 28 30
> mapply(function(x,y)c(x+y,x*y),1:10,11:20)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]   12   14   16   18   20   22   24   26   28    30
[2,]   11   24   39   56   75   96  119  144  171   200

> mapply(rep,times=1:4,x=4:1)
[[1]]
[1] 4

[[2]]
[1] 3 3

[[3]]
[1] 2 2 2

[[4]]
[1] 1 1 1 1

> rep(times=1:4,x=4:1)
 [1] 4 3 3 2 2 2 1 1 1 1

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
R语言apply函数是一组非常有用的函数,用于对数据进行操作和计算。它们的共同点是都可以对数组、矩阵、列表等数据结构进行操作,是一种方便而高效的数据操作方式。下面分别介绍一下这些函数的用法和示例: 1. apply函数 apply函数的作用是对矩阵或数组的某些维度进行操作,返回一个结果向量、矩阵或列表。它的基本语法为: ``` apply(X, MARGIN, FUN, ...) ``` 其,X是要操作的矩阵或数组;MARGIN是指定对哪个维度进行操作,取值为1表示对行进行操作,取值为2表示对列进行操作,取值为c(1,2)则表示对整个矩阵进行操作;FUN是要应用的函数。 例如,计算矩阵每一行的平均值: ``` mat <- matrix(1:9, ncol=3) apply(mat, 1, mean) ``` 2. lapply函数 lapply函数的作用是对列表的每个元素应用一个函数,返回一个新的列表。它的基本语法为: ``` lapply(X, FUN, ...) ``` 其,X是要操作的列表;FUN是要应用的函数。 例如,对一个列表的每个元素求平方: ``` lst <- list(1:3, 4:6, 7:9) lapply(lst, function(x) x^2) ``` 3. sapply函数 sapply函数与lapply函数类似,用于对列表的每个元素应用一个函数,并返回一个向量或矩阵。它的基本语法为: ``` sapply(X, FUN, ...) ``` 其,X是要操作的列表;FUN是要应用的函数。 例如,对一个列表的每个元素求平方,并返回一个向量: ``` lst <- list(1:3, 4:6, 7:9) sapply(lst, function(x) x^2) ``` 4. tapply函数 tapply函数的作用是对向量按照某个因子进行分组,然后对每组应用一个函数。它的基本语法为: ``` tapply(X, INDEX, FUN, ...) ``` 其,X是要操作的向量;INDEX是用来分组的因子;FUN是要应用的函数。 例如,对一个向量按照某个因子进行分组,并计算每组的平均值: ``` vec <- c(1, 2, 3, 4, 5, 6) group <- c("A", "B", "A", "B", "A", "B") tapply(vec, group, mean) ``` 5. mapply函数 mapply函数的作用是对多个向量进行相同的操作,返回一个向量或矩阵。它的基本语法为: ``` mapply(FUN, ..., MoreArgs = NULL) ``` 其,FUN是要应用的函数;...是要操作的向量,可以有多个;MoreArgs是一个可选的参数,用来传递额外的参数给FUN。 例如,对两个向量进行相加: ``` vec1 <- c(1, 2, 3) vec2 <- c(4, 5, 6) mapply(function(x, y) x + y, vec1, vec2) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值