例如,M是稀疏矩阵,track_list是矩阵的colnames。
library(Matrix)
M <- Matrix(0,nrow = 3,ncol = 4)
M[1,2] = 1
M[2,3] = 1
M[3,2] = 1
track_list = c('a','b','c','d')
colnames(M) = track_list
col_tmp <- M@p[-1] - M@p[-length(M@p)]
M <- M[,col_tmp!=0]
track_list = track_list[col_tmp!=0]
结果将是:
> M
3 x 2 sparse Matrix of class "dgCMatrix"
b c
[1,] 1 .
[2,] . 1
[3,] 1 .
然而,设计很难看。那怎么做?
谢谢。
答案 0 :(得分:6)
使用summary()
获取包含非零条目列的索引的sparseSummary
可能是最直截了当的。
library(Matrix)
M <- Matrix(c(0,0,0,1,0,0,0,1,1,1,0,0), nc=4)
M[,unique(summary(M)$j)]
# 3 x 3 sparse Matrix of class "dgCMatrix"
#
# [1,] 1 . 1
# [2,] . 1 .
# [3,] . 1 .
## To see how it works, compare M and summary(M)
M
# 3 x 4 sparse Matrix of class "dgCMatrix"
#
# [1,] . 1 . 1
# [2,] . . 1 .
# [3,] . . 1 .
summary(M)
# 3 x 4 sparse Matrix of class "dgCMatrix", with 4 entries
# i j x
# 1 1 2 1
# 2 2 3 1
# 3 3 3 1
# 4 1 4 1
答案 1 :(得分:3)
试试这个:
M <- matrix(0,nrow = 3,ncol = 4)
M[1,2] = M[2,3] = M[3,2] = 1
M = M[,colSums(M != 0) != 0]
如果您有兴趣使用Matrix
软件包,则可以完全按照上述方式执行操作 - 只需使用matrix(...)
更改Matrix(...)
即可。这些点是零值,不要担心它们:
M = Matrix(0,nrow = 3,ncol = 4)
M
# 3 x 4 sparse Matrix of class "dgCMatrix"
# [1,] . . . .
# [2,] . . . .
# [3,] . . . .
M[1,1]
# [1] 0
实际上,Matrix
包似乎对稀疏矩阵(一些非零元素的矩阵)进行了优化。因此,它通过点显示零,以更好地表示矩阵的稀疏程度。