R中操作apply、tapply、lapply、sapply、mapply、table等函数举办分组统计
当前位置:以往代写 > 其他教程 >R中操作apply、tapply、lapply、sapply、mapply、table等函数举办分组统计
2019-06-14

R中操作apply、tapply、lapply、sapply、mapply、table等函数举办分组统计

R中操作apply、tapply、lapply、sapply、mapply、table等函数举办分组统计

  • apply函数(对一个数组按行可能按罗列办计较):

  • 利用名目为:

    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] [,3] [,4]
    [1,] 1 3 1 7
    [2,] 2 4 6 8
    > apply(ma, c(1,2), sum)
    [,1] [,2] [,3] [,4]
    [1,] 1 3 1 7
    [2,] 2 4 6 8
    > apply(ma, 1, sum)
    [1] 12 20
    > apply(ma, 2, sum)
    [1] 3 7 7 15

  • 函数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()把参数强制转换成因子。
    示例代码:
    > fac <- factor(rep(1:3, length = 17), levels = 1:5)
    > fac
    [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2
    Levels: 1 2 3 4 5
    > tapply(1:17, fac, sum)
    1 2 3 4 5
    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] 1 16

    $`2`
    [1] 2 17

    $`3`
    [1] 3 15

    $`4`
    NULL

    $`5`
    NULL
    #操作tapply实现雷同于Excel里的数据透视表的成果:
    > da
    year province sale
    1 2007 A 1
    2 2007 B 2
    3 2007 C 3
    4 2007 D 4
    5 2008 A 5
    6 2008 C 6
    7 2008 D 7
    8 2009 B 8
    9 2009 C 9
    10 2009 D 10
    > attach(da)
    > tapply(sale,list(year,province))
    [1] 1 4 7 10 2 8 11 6 9 12
    > tapply(sale,list(year,province),mean)
    A B C D
    2007 1 2 3 4
    2008 5 NA 6 7
    2009 NA 8 9 10

  • 函数table(求因子呈现的频数):

  • 利用名目为:

    table(…, exclude = if (useNA == “no”) c(NA, NaN), useNA = c(“no”,

    “ifany”, “always”), dnn = list.names(…), deparse.level = 1)
    个中参数exclude暗示哪些因子不计较。
    示例代码:
    > d <- factor(rep(c(“A”,”B”,”C”), 10), levels=c(“A”,”B”,”C”,”D”,”E”))
    > d
    [1] A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C
    Levels: A B C D E
    > table(d)
    d
    A B C D E
    10 10 10 0 0
    > table(d, exclude=”B”)
    d
    A C D E
    10 10 0 0

  • 函数lapply与函数sapply:

  • 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
    0% 25% 50% 75% 100%
    1.00 3.25 5.50 7.75 10.00

    $beta
    0% 25%

      关键字:

    在线提交作业