矩阵的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