我想在我的矩阵中添加一个新的行,其中新行的每一列是每行中第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相同的结果
也许有人问过这个简单的问题,但我似乎无法找到它;似乎有很多更复杂的问题,但没有一个基本。
感谢任何帮助......
答案 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
上。一行colSums
行1:3
,另一行colSums
行5:6