R中操作apply、tapply、lapply、sapply、mapply、table等函数举办分组统计
利用名目为:
apply(X, MARGIN, FUN, …)
个中X为一个数组;MARGIN为一个向量(暗示要将函数FUN应用到X的行照旧列),若为1暗示取行,为2暗示取列,为c(1,2)暗示行、列都计较。
示例代码:
> ma <- matrix(c(1:4, 1, 6:8), nrow = 2)
> ma
[1,]
[2,]
> apply(ma, c(1,2), sum)
[1,]
[2,]
> apply(ma, 1, sum)
[1] 12 20
> apply(ma, 2, sum)
[1]
利用名目为:
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()把参数强制转换成因子。
示例代码:
> fac <- factor(rep(1:3, length = 17), levels = 1:5)
> fac
Levels: 1 2 3 4 5
> tapply(1:17, fac, sum)
51 57 45 NA NA
> tapply(1:17, fac, sum, simplify = FALSE)
$`1`
[1] 51
$`2`
[1] 57
$`3`
[1] 45
$`4`
NULL
$`5`
NULL
> tapply(1:17, fac, range)
$`1`
[1]
$`2`
[1]
$`3`
[1]
$`4`
NULL
$`5`
NULL
#操作tapply实现雷同于Excel里的数据透视表的成果:
> da
1
2
3
4
5
6
7
8
9
10 2009
> attach(da)
> tapply(sale,list(year,province))
> tapply(sale,list(year,province),mean)
2007
2008
2009 NA
利用名目为:
table(…, exclude = if (useNA == “no”) c(NA, NaN), useNA = c(“no”,
个中参数exclude暗示哪些因子不计较。
示例代码:
> d <- factor(rep(c(“A”,”B”,”C”), 10), levels=c(“A”,”B”,”C”,”D”,”E”))
> d
Levels: A B C D E
> table(d)
d
10 10 10
> table(d, exclude=”B”)
d
10 10
lapply的利用名目为:
lapply(X, FUN, …)
lapply的返回值是和一个和X有沟通的长度的list工具,这个list工具中的每个元素是将函数FUN应用到X的每一个元素。个中X为List工具(该list的每个元素都是一个向量),其他范例的工具会被R通过函数as.list()自动转换为list范例。
函数sapply是函数lapply的一个非凡景象,对一些参数的值举办了一些限定,其利用名目为:
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))
> lapply(x, quantile)
$a
$beta