【发布时间】:2020-02-17 04:51:17
【问题描述】:
我目前有 185*185 矩阵,目标是通过基于行和列的聚合值将此矩阵转换为 35*35 矩阵 185矩阵。
例子:
- 我有一个 8*8 矩阵如下:
matrix_x <- matrix(1:64, nrow = 8)
- 那我想把它转成4*4的矩阵:
matrix_y <- matrix(NA, nrow = 4, ncol = 4)
- 下面的列表是为将 8*8 矩阵列聚合为 4*4 矩阵而创建的
col_list <- list(
1,
2:3,
c(4,8),
5:7
)
- 我所做的是通过手动分配值来实现这一点,如下所示
matrix_y[1,1] <- sum(matrix_x[col_list[[1]],col_list[[1]]])
matrix_y[1,2] <- sum(matrix_x[col_list[[1]],col_list[[2]]])
matrix_y[1,3] <- sum(matrix_x[col_list[[1]],col_list[[3]]])
matrix_y[1,4] <- sum(matrix_x[col_list[[1]],col_list[[4]]])
matrix_y[2,1] <- sum(matrix_x[col_list[[2]],col_list[[1]]])
matrix_y[2,2] <- sum(matrix_x[col_list[[2]],col_list[[2]]])
matrix_y[2,3] <- sum(matrix_x[col_list[[2]],col_list[[3]]])
matrix_y[2,4] <- sum(matrix_x[col_list[[2]],col_list[[4]]])
matrix_y[3,1] <- sum(matrix_x[col_list[[3]],col_list[[1]]])
matrix_y[3,2] <- sum(matrix_x[col_list[[3]],col_list[[2]]])
matrix_y[3,3] <- sum(matrix_x[col_list[[3]],col_list[[3]]])
matrix_y[3,4] <- sum(matrix_x[col_list[[3]],col_list[[4]]])
matrix_y[4,1] <- sum(matrix_x[col_list[[4]],col_list[[1]]])
matrix_y[4,2] <- sum(matrix_x[col_list[[4]],col_list[[2]]])
matrix_y[4,3] <- sum(matrix_x[col_list[[4]],col_list[[3]]])
matrix_y[4,4] <- sum(matrix_x[col_list[[4]],col_list[[4]]])
这种方法效果很好,但我正在寻找一种更有效的方法来实现这一点,因为我所做的方法需要很多代码行。
【问题讨论】:
-
您的代码不可重现,所以我不确定您要做什么。
-
我也很困惑。引用序列有什么意义,例如
"1":"36"?为什么不1:36?col_list应该做什么?后退一步,构建一个minimal的例子可能会有所帮助;尝试给出一个输入较小的示例matrix(您目前似乎没有包含任何示例数据)。 -
您好,感谢您的评论。我已经更新了这个问题,所以希望你能理解我想要做什么。我引用了这些序列,因为如果我不这样做,它会返回错误的计算,因为它会忽略一个全为零的列