查找具有非零元素的最大尺寸子矩阵

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

我有一个矩阵,行是基因名称,列是样本名称。该矩阵的元素为0或1(1表示该样本中表达的基因,0表示不表达)。我想找到最大子集样本中表达的基因的最大子集。换句话说,我想通过重新排列行和列来找到只有 1 的最大矩阵。

如:

mat <- matrix(c(1,0,1,1,1,0,1,0,1),nrow = 3,byrow = T)
mat
      [,1] [,2] [,3]
[1,]    1    0    1
[2,]    1    1    0
[3,]    1    0    1
###first swap column2 and column3
mat1 <- mat
mat1[,2] <- mat[,3]
mat1[,3] <- mat[,2]
mat1
      [,1] [,2] [,3]
[1,]    1    1    0
[2,]    1    0    1
[3,]    1    1    0
###then swap row2 and row3
mat2 <- mat1
mat2[2,] <- mat1[3,]
mat2[3,] <- mat1[2,]
mat2
      [,1] [,2] [,3]
[1,]    1    1    0
[2,]    1    1    0
[3,]    1    0    1
###then the up-left is wanted matrix
r bioinformatics
1个回答
0
投票

看看这是如何概括的,

mat[order(matrixStats::rowSums2(matrixStats::rowCumsums(mat))), 
    order(-matrixStats::colSums2(matrixStats::colCumsums(mat)))]
#      [,1] [,2] [,3]
# [1,]    1    1    0
# [2,]    1    1    0
# [3,]    1    0    1
© www.soinside.com 2019 - 2024. All rights reserved.