当前位置:天才代写 > tutorial > 其他教程 > R中操作apply、tapply、lapply、sapply、mapply、table等函数举办分组统计

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

2017-12-04 08:00 星期一 所属: 其他教程 浏览:422

  • 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% 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

    > sapply(x, quantile,simplify=FALSE,use.names=FALSE)
    $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
    #参数simplify=TRUE的环境
    > sapply(x, quantile)
    a beta logic
    0% 1.00 0.04978707 0.0
    25% 3.25 0.25160736 0.0
    50% 5.50 1.00000000 0.5
    75% 7.75 5.05366896 1.0
    100% 10.00 20.08553692 1.0

  • 函数mapply:

  • 函数mapply是函数sapply的变形版,mapply 将函数 FUN 依次应用每一个参数的第一个元素、第二个元素、第三个元素上。函数mapply的利用名目如下:

    mapply(FUN, …, MoreArgs = NULL, SIMPLIFY = TRUE,USE.NAMES = TRUE)
    个中参数MoreArgs暗示函数FUN的参数列表。

    示例代码:
    > 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的功效:
    > rep(1:4,1:4)
    [1] 1 2 2 3 3 3 4 4 4 4
     

      关键字:

    天才代写-代写联系方式