是否有一种方法可以汇总一列中的所有值并将其粘贴到最后一个“单元格”中?
示例:我有一个类似的矩阵:
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)
我们根据问题的解释提供几种解决方案。它们都假定除最后一行外,将返回零矩阵。 (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))
假设您的矩阵由]给出>
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)
另一个选项是colSums