我有一个矩阵,行是基因名称,列是样本名称。该矩阵的元素为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
看看这是如何概括的,
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