R语言学习笔记六
apply函数族
分组计算–apply函数
apply(x, margin, fun, ...)
x
:矩阵或者数组margin
:一个向量,给出在哪几个维度上应用函数【1表示行,2表示列,3表示层】fun
:要应用的函数…
:传递给fun的额外参数
二维
> m<-matrix(1:12,nrow=3)
> m
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> apply(m,1,sum)
[1] 22 26 30
> apply(m,2,sum)
[1] 6 15 24 33
传递没有函数名的函数
> apply(m,1,function(x){
x=x+1
sum(x^2)
})
[1] 214 270 334
三维
> sales
, , A
Q1 Q2 Q3 Q4
apple 24 27 39 38
orange 29 32 23 35
banana 25 24 32 27
, , B
Q1 Q2 Q3 Q4
apple 32 20 26 39
orange 38 27 26 36
banana 32 32 30 20
apply(sales,3,function(x){
cat('x=\n')
print(x)
cat('------------------\n')
sum(x)
})
=======结果👇=======
x=
Q1 Q2 Q3 Q4
apple 24 27 39 38
orange 29 32 23 35
banana 25 24 32 27
------------------
x=
Q1 Q2 Q3 Q4
apple 32 20 26 39
orange 38 27 26 36
banana 32 32 30 20
------------------
A B
355 358
如果希望查看多个维度,比如在层的基础上对行或者列进行细分,需要引入维度向量,代码中1和3的顺序导致矩阵转置
apply(sales,c(3,1),function(x){
cat('x=\n')
print(x)
cat('------------------\n')
sum(x)
})
ps:也可以用rowSums就传入3即可
分组计算–tapply函数
tapply(x,index,fun,...)
- 将向量分组以后每组应用函数
x
:被分组的向量index
:一个因子或者多个因子的列表,每个因子都和向量x一样长fun
:应用的函数...
:传递给fun的额外参数
单因子分组
> height
[1] 181 169 163 175 160 183 169 181 181 175
> sex
[1] Female Female Female Male Male Male
[7] Female Female Male Female
Levels: Female Male
''' sex是因子,height是向量'''
> tapply(height,sex,function(x) c(min(x),mean(x),max(x)))
$Female
[1] 163 173 181
$Male
[1] 160.00 174.75 183.00
统计每组个数用table(x)
就行
多因子分组
> score<-pmin(round(rnorm(50,mean=80,sd=9)),100)
> sex