在R中使用约束条件调整矩阵大小

3

我有一个大小为 5x5 的矩阵,它长这样:

A<- matrix(c(24,18,18,24,56,
         0,0,2,8,32,
         3,12,6,27,1,
         9,8,14,39,51,
         34,45,0,17,0),nrow=5,byrow=F)

我希望将其调整为2x2的尺寸,效果如下所示。
C <- matrix(c(sum(A[1:2,1:2]),
          sum(A[1:2,3:5]),
          sum(A[3:5,1:2]),
          sum(A[3:5,3:5])),nrow=2,byrow = T)

有没有更简单的方法?非常感谢!
2个回答

2

这段内容不算太短,但如果你希望编写可重复使用的函数可能会有所帮助。

在这里,我注意到初始的A[1:j, 1:j]是第一个子矩阵,而已知的j可以确定其余的子矩阵。

j <- 2
n <- nrow(A)
p <- ncol(A)

 matrix(c(sum(A[1:j, 1:j]), sum(A[1:j, (j+1):p]), 
         sum(A[(j+1):n, 1:j]), sum(A[(j+1):n , (j+1):p])),
         nrow = 2, byrow = TRUE)

#      [,1] [,2]
# [1,]   42  111
# [2,]  140  155

1
不用担心,@hnguyen。请点击帮助最多的答案旁边的勾号。 - kangaroo_cliff

1
如果您有一个 m x m 的矩阵想要总结成一个 n x n 的矩阵,这个方法可以实现,虽然它不是很简短:
n = 2

#assume m x m matrix
n_row <- nrow(A)
lst = list(1:floor(n_row / n), ceiling(n_row/ n): n_row)

matrix(
  apply(expand.grid(seq_len(n), seq_len(n)),
      1,
      function(i) sum(A[lst[[i[1]]], lst[[i[2]]]])
      ),
  n)

绝对比我的代码清晰易懂。谢谢! - hnguyen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接