colsum rowsum填充矩阵

时间:2013-12-28 20:36:14

标签: r if-statement matrix apply

我正在尝试为矩阵中的每个单元格条目写入最小值,即在相同维度的新矩阵中的rowsum值或colsum值。

例如:

说我有矩阵c看起来像这样:

x <- matrix(seq(1:6),2)
x
      [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

它的rowum和colsum是:

rowSums(x)
[1]  9 12
colSums(x)
[1]  3  7 11

基于该信息,新矩阵应如下所示:

      [,1] [,2] [,3]
[1,]    3    7    9
[2,]    3    7    11

我一直在考虑使用apply但我不知道如何编写if语句来为每个单元格条目写出rowsum或colsum中的最小值。有什么想法吗?

2 个答案:

答案 0 :(得分:6)

这可以被认为是行和列总和的外积,其中函数采用最小值:

outer(rowSums(x), colSums(x), FUN=pmin)
##      [,1] [,2] [,3]
## [1,]    3    7    9
## [2,]    3    7   11

答案 1 :(得分:2)

x[] <- pmin(rep(colSums(x), each = nrow(x)), rep(rowSums(x), times = ncol(x)))
x
#      [,1] [,2] [,3]
# [1,]    3    7    9
# [2,]    3    7   11