如何对矩阵中的列求和并将值粘贴到r中的最后一个单元格中?

问题描述 投票:0回答:3

是否有一种方法可以汇总一列中的所有值并将其粘贴到最后一个“单元格”中?

示例:我有一个类似的矩阵:

  1  2  3
1 0  0  1
2 0  0  2
3 0  0  6

而且我想要(需要)一个矩阵,如:

  1  2  3
1 0  0  0
2 0  0  0
3 0  0  9

此外,我还需要一种迭代方法,因为矩阵尺寸会有所不同。

谢谢您!

编辑:

以下解决方案有效:

creating a second zero'd matrix with the same dimensions and the following code 
matrix2[nrow(matrix2),] <- colSums(m1)
r
3个回答
2
投票

我们根据问题的解释提供几种解决方案。它们都假定除最后一行外,将返回零矩阵。 (1)仅对最后一列求和,(2)对第i列求和,(2a)对所有列求和。

所有解决方案都是一行,除了定义nr和/或nc并保留原始m矩阵并返回新矩阵。

1]使用末尾音符中可重复显示的m,将m乘以零,然后替换最后一个单元格(将在位置prod(dim(m))处加上最后一列的总和。

nc <- ncol(m)
replace(0 * is.na(m), prod(dim(m)), sum(m[, nc]))
##   1 2 3
## 1 0 0 0
## 2 0 0 0
## 3 0 0 9

如果已知m没有NA,则可以在上述代码中将is.na(m)替换为m。

2)如果该列不一定要排在最后,则如果i是要求和的列的索引(或者它可以是要求和的那些列的索引的向量,并且应该有多个)。 :

i <- 3
nr <- nrow(m)
replace(0 * is.na(m), i * nr, colSums(m[, i, drop = FALSE]))

2a)如果要对所有列求和,则i

nc <- ncol(m)
nr <- nrow(m)
replace(0 * is.na(m), (1:nc) * nr, colSums(m, na.rm = TRUE))

如果需要处理零列矩阵,请使用seq_len(nc)而不是1:nc

注意

m <- matrix(c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 2L, 6L), 3, dimnames = list(1:3, 1:3))

1
投票

假设您的矩阵由]给出>

mat <- matrix(c(0,0,1,0,0,2,0,0,6,0,0,7), nrow=4, byrow = TRUE)

然后

mat_2 <- matrix(0L, nrow=dim(mat)[1], ncol=dim(mat)[2])

为您提供尺寸相同且仅包含0s的矩阵。现在通过

计算总和
mat_2[dim(mat)[1],] <- apply(mat, 2, sum)

1
投票

另一个选项是colSums

© www.soinside.com 2019 - 2024. All rights reserved.