#在矩阵中添加一行,该矩阵是同一列中其他行的多个子集的总和

时间:2017-11-20 17:28:00

标签: r matrix

我想在我的矩阵中添加一个新的行,其中新行的每一列是每行中第1行到第3行以及第5行和第6行的总和。

我一直在尝试使用rbind和rowCols来尝试找到答案:

     # example
     mat <- matrix(1:21, byrow = TRUE, nrow =7)
     matplus <- rbind(mat, colSums(mat[1:3, ])) # works fine, but

我想创建第8行,其中每列是(a)第1-3行和(b)第5行和第6行的总和;像这样:

     obj <- rbind(mat, c(41,46,51))


    >       [,1] [,2] [,3]
    >[1,]    1    2    3
    >[2,]    4    5    6
    >[3,]    7    8    9
    >[4,]   10   11   12
    >[5,]   13   14   15
    >[6,]   16   17   18
    >[7,]   19   20   21
    >[8,]   41   46   51

(但当然,我需要能够计算41,46和51)

各种尝试......

尝试#1

    matpplus <- rbind(mat, c(colSums(mat[1:3, ]), colSums(mat[5:6, ]))) 

这不适用于此警告:

  

在rbind(mat,c(colSums(mat [1:3,]),colSums(mat [5:6,]))):   结果列数不是向量长度的倍数(arg 2)

尝试#2

      matpplus <- rbind(mat, colSums(mat[1:3, ]), colSums(mat[5:6, ])) 

添加两行而不是一行

尝试#3

      matplus <- rbind(mat, colSums(mat[1:3, ], mat[5:6, ])) 

与try#1相同的结果

也许有人问过这个简单的问题,但我似乎无法找到它;似乎有很多更复杂的问题,但没有一个基本。

感谢任何帮助......

1 个答案:

答案 0 :(得分:1)

根据我的评论,您几乎可以使用colSums,您可以同时选择1:3和5:6,然后执行colSums

rbind(mat, colSums(mat[c(1:3, 5:6), ]))

#     [,1] [,2] [,3]
#[1,]    1    2    3
#[2,]    4    5    6
#[3,]    7    8    9
#[4,]   10   11   12
#[5,]   13   14   15
#[6,]   16   17   18
#[7,]   19   20   21
#[8,]   41   46   51

您遇到rbind(mat, colSums(mat[1:3, ]), colSums(mat[5:6, ]))时遇到的问题是您尝试将2行堆叠到mat上。一行colSums1:3,另一行colSums5:6