8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

分组函数(tapply、by、aggregate)和 *apply 系列

Gereon will not feed AI 2月前

91 0

每当我想在 R 中执行 \'map\'py 操作时,我通常会尝试使用 apply 系列中的函数。但是,我从未完全理解它们之间的区别 -- 如何 {sapply、lapply 等}...

每当我想在 R 中执行某些\'map\'py 操作时,我通常会尝试使用该 apply 系列中的函数。

然而,我从来没有完全理解它们之间的区别——{ sapply , lapply 等} 如何将函数应用于输入/分组输入,输出会是什么样子,甚至输入可以是什么——所以我经常只是仔细检查它们直到得到我想要的。

有人可以解释一下何时如何使用哪一个吗?

我目前的理解(可能不正确/不完整)是......

  1. p5

  2. p6

  3. apply(matrix, 1/2, f) :输入是一个矩阵。输出是一个向量,其中元素 i 是 f(矩阵的第 i 行/第 i 列)
  4. tapply(vector, grouping, f) :输出是一个矩阵/数组,其中矩阵/数组中的元素是 f 向量分组 g ,并 g 被推送到行/列名称
  5. by(dataframe, grouping, f) :设为 g 分组。应用于 f 组/数据框的每一列。漂亮地打印分组和 f 每列的值。
  6. aggregate(matrix, grouping, f) :类似于 by ,但聚合不会漂亮地打印输出,而是将所有内容粘贴到数据框中。

附带问题:我还没有学过 plyr 或 reshape - 是否会 plyr 完全 reshape 取代这些?

帖子版权声明 1、本帖标题:分组函数(tapply、by、aggregate)和 *apply 系列
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Gereon will not feed AI在本站《list》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我最近发现了一个相当有用的 sweep 功能,为了完整性起见,在这里添加它:

    基本思想是 扫描 数组并返回修改后的数组。下面这个例子可以清楚地说明这一点(来源: datacamp ):

    假设您有一个矩阵并想 按列对其 进行标准化

    dataPoints <- matrix(4:15, nrow = 4)
    
    # Find means per column with `apply()`
    dataPoints_means <- apply(dataPoints, 2, mean)
    
    # Find standard deviation with `apply()`
    dataPoints_sdev <- apply(dataPoints, 2, sd)
    
    # Center the points 
    dataPoints_Trans1 <- sweep(dataPoints, 2, dataPoints_means,"-")
    
    # Return the result
    dataPoints_Trans1
    ##      [,1] [,2] [,3]
    ## [1,] -1.5 -1.5 -1.5
    ## [2,] -0.5 -0.5 -0.5
    ## [3,]  0.5  0.5  0.5
    ## [4,]  1.5  1.5  1.5
    
    # Normalize
    dataPoints_Trans2 <- sweep(dataPoints_Trans1, 2, dataPoints_sdev, "/")
    
    # Return the result
    dataPoints_Trans2
    ##            [,1]       [,2]       [,3]
    ## [1,] -1.1618950 -1.1618950 -1.1618950
    ## [2,] -0.3872983 -0.3872983 -0.3872983
    ## [3,]  0.3872983  0.3872983  0.3872983
    ## [4,]  1.1618950  1.1618950  1.1618950
    

    注意:对于这个简单的例子,当然可以通过以下方式更轻松地实现相同的结果
    apply(dataPoints, 2, scale)

返回
作者最近主题: