3

たとえば、Mはスパース行列であり、track_listは行列の列名です。

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 .

しかし、デザインは醜いです。だからそれを行う方法は?

ありがとうございました 。

4

2 に答える 2

7

ゼロ以外のエントリを持つ列のインデックスを含む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
于 2012-10-26T18:25:44.727 に答える
4

これを試して :

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最適化が含まれているようです。したがって、マトリックスがどの程度スパースであるかをより適切に表すために、ポイントごとにゼロが表示されます。

于 2012-10-26T18:22:11.737 に答える