【问题标题】:r sum by groups for matricesr 按组求和矩阵
【发布时间】:2020-08-26 13:11:05
【问题描述】:

我的矩阵中有三列

       [,1]       [,2] [,3]
          1 0.11651699    1
          1 0.03850202    1
          0 0.11651699   NA
          0 0.11651699   NA
          1 0.04110752   39
          1 0.03599296   39
          1 0.05440237   41
          1 0.11651699   42
          1 0.06298718   42
          0 0.11651699   NA
          0 0.11651699   NA
          0 0.11651699   NA

我正在尝试在我的矩阵中创建第四列,用于存储每个组(第 3 列)的第 2 列的总和。预期如下

      [,1]       [,2]  [,3]   [,4]
          1 0.11651699    1    0.155019 = (0.11651699  + 0.03850202)
          1 0.03850202    1    0.155019 = (0.11651699  + 0.03850202)
          0 0.11651699   NA    1
          0 0.11651699   NA    1
          1 0.04110752   39    0.07710048 = (0.04110752 + 0.03599296) 
          1 0.03599296   39    0.07710048 = (0.04110752 + 0.03599296)
          1 0.05440237   41    0.09290439 = (0.03850202 + 0.05440237)
          1 0.11651699   42    0.1795042  = (0.11651699 + 0.06298718)
          1 0.06298718   42    0.1795042  = (0.11651699 + 0.06298718)
          0 0.11651699   NA    1
          0 0.11651699   NA    1
          1 0.03850202   41    0.09290439 = (0.03850202 + 0.05440237)

显然我不能使用dplyrgroupby,因为这仅适用于数据帧,而我正在处理矩阵对象。所以我尝试了aggregate(df1[,2] ~ df1[,3], df, sum),它成功了,但是从聚合函数中获取结果并创建第四列并不容易,如预期的输出所示。

【问题讨论】:

    标签: r matrix group-by aggregate


    【解决方案1】:

    如果你想对矩阵做这个操作,你可以使用ave

    mat1 <- cbind(mat, ave(mat[, 2], mat[, 3], FUN = sum))
    #Changing 4th column to 1 for NA values in column 3.
    mat1[is.na(mat[, 3]), 4] <- 1
    mat1
    
    #      [,1]       [,2] [,3]       [,4]
    # [1,]    1 0.11651699    1 0.15501901
    # [2,]    1 0.03850202    1 0.15501901
    # [3,]    0 0.11651699   NA 1.00000000
    # [4,]    0 0.11651699   NA 1.00000000
    # [5,]    1 0.04110752   39 0.07710048
    # [6,]    1 0.03599296   39 0.07710048
    # [7,]    1 0.05440237   41 0.09290439
    # [8,]    1 0.11651699   42 0.17950417
    # [9,]    1 0.06298718   42 0.17950417
    #[10,]    0 0.11651699   NA 1.00000000
    #[11,]    0 0.11651699   NA 1.00000000
    #[12,]    0 0.03850202   41 0.09290439
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-20
      • 2014-07-21
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      • 2016-07-25
      相关资源
      最近更新 更多