矩阵的r-群和

矩阵的r-群和,r,matrix,group-by,aggregate,R,Matrix,Group By,Aggregate,我的矩阵中有三列 [,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.116

我的矩阵中有三列

       [,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
我试图在我的矩阵中创建第四列,存储每个组第2列的总和(第3列)。预期结果如下所示

      [,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)

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

如果您想对矩阵执行此操作,可以使用
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

mat1如果要对矩阵执行此操作,可以使用
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
mat1