apply, tapply, sapply, lapply, mapply, table等用法

apply

  • 使用格式为:
    apply(X, MARGIN, FUN, …)
    其中X为一个数组或者矩阵;MARGIN为一个向量(表示要将函数FUN应用到X的行还是列),若为1表示取行,为2表示取列,为c(1,2)表示行、列都计算。

  • 示例代码:

x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
dimnames(x)[[1]] <- letters[1:8]
apply(x, 2, mean, trim = .2) #截尾取按列平均值

x1 x2
3 3

col.sums <- apply(x, 2, sum)
row.sums <- apply(x, 1, sum)
rbind(cbind(x, Rtot = row.sums), Ctot = c(col.sums, sum(col.sums)))

x1 x2 Rtot
a 3 4 7
b 3 3 6
c 3 2 5
d 3 1 4
e 3 2 5
f 3 3 6
g 3 4 7
h 3 5 8
Ctot 24 24 48

tapply

  • 使用格式:
    tapply(X, INDEX, FUN = NULL, …, simplify = TRUE)
    其中X通常是一向量;INDEX是一个list对象,且该list中的每一个元素都是与X有同样长度的因子;FUN是需要计算的函数;simplify是逻辑变量,若取值为TRUE(默认值),且函数FUN的计算结果总是为一个标量值,那么函数tapply返回一个数组;若取值为FALSE,则函数tapply的返回值为一个list对象。需要注意的是,当第二个参数INDEX不是因子时,函数 tapply() 同样有效,因为必要时 R 会用 as.factor()把参数强制转换成因子。一般用于factor,利用tapply可以实现excel数据透视表的功能.
n <- 17; fac <- factor(rep(1:3, length = n), levels = 1:5)
table(fac)

fac
1 2 3 4 5
6 6 5 0 0

tapply(1:n, fac, sum)

1 2 3 4 5
51 57 45 NA NA

tapply(1:n, fac, sum, simplify = FALSE)

$1
[1] 51

$2
[1] 57

$3
[1] 45

$4
NULL

$5
NULL

tapply(1:n, fac, range)

$1
[1] 1 16

$2
[1] 2 17

$3
[1] 3 15

$4
NULL

$5
NULL

tapply(1:n, fac, quantile)

$1
0% 25% 50% 75% 100%
1.00 4.75 8.50 12.25 16.00

$2
0% 25% 50% 75% 100%
2.00 5.75 9.50 13.25 17.00

$3
0% 25% 50% 75% 100%
3 6 9 12 15

$4
NULL

$5
NULL

lapply与sapply

lapply的使用格式为:
lapply(X, FUN, …)
lapply的返回值是和一个和X有相同的长度的list对象,这个list对象中的每个元素是将函数FUN应用到X的每一个元素。其中X为List对象(该list的每个元素都是一个向量),其他类型的对象会被R通过函数as.list()自动转换为list类型。
函数lapply是sapply函数的一个特殊情形,对一些参数的值进行了一些限定,其使用格式为:
sapply(X, FUN,…, simplify = TRUE, USE.NAMES = TRUE)
sapply(, simplify = FALSE, USE.NAMES = FALSE) 和lapply()的返回值是相同的。如果参数simplify=TRUE,则函数sapply的返回值不是一个list,而是一个矩阵;若simplify=FALSE,则函数sapply的返回值仍然是一个list。

x <- list(a = 1:10, beta = exp(-3:3), logic = c(TRUE,FALSE,FALSE,TRUE))
x

$a
[1] 1 2 3 4 5 6 7 8 9 10

$beta
[1] 0.04978707 0.13533528 0.36787944 1.00000000 2.71828183 7.38905610 20.08553692

$logic
[1] TRUE FALSE FALSE TRUE

lapply(x, quantile)

$a
0% 25% 50% 75% 100%
1.00 3.25 5.50 7.75 10.00

$beta
0% 25% 50% 75% 100%
0.04978707 0.25160736 1.00000000 5.05366896 20.08553692

$logic
0% 25% 50% 75% 100%
0.0 0.0 0.5 1.0 1.0

mapply

函数mapply是函数sapply的变形版,mapply 将函数 FUN 依次应用每一个参数的第一个元素、第二个元素、第三个元素上。函数mapply的使用格式如下:
mapply(FUN, …, MoreArgs = NULL, SIMPLIFY = TRUE,USE.NAMES = TRUE)
其中参数MoreArgs表示函数FUN的参数列表。

mapply(function(x, y) seq_len(x) + y,
       c(a =  1, b = 2, c = 3),  # names from first
       c(A = 10, B = 0, C = -10))

$a
[1] 11

$b
[1] 1 2

$c
[1] -9 -8 -7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值