0
リスト(可変長要素を含む)を含む行列を疎行列に変換しようとしています。これは、おもちゃの例である:リストを含む行列を疎行列に変換する
mOrig = matrix(
c(rep(c('a_b', 'X'), 3),
rep(c('a_b_e', 'X'), 2),
rep(c('a_b_f', 'X'), 1),
rep(c('c_d', 'Y'), 3),
rep(c('c_d_e', 'Y'), 2),
rep(c('c_d_f', 'Y'), 1)),
ncol=2, byrow=TRUE
)
colnames(mOrig) = c('in', 'out')
mOrig
in out
[1,] "a_b" "X"
[2,] "a_b" "X"
[3,] "a_b" "X"
[4,] "a_b_e" "X"
[5,] "a_b_e" "X"
[6,] "a_b_f" "X"
[7,] "c_d" "Y"
[8,] "c_d" "Y"
[9,] "c_d" "Y"
[10,] "c_d_e" "Y"
[11,] "c_d_e" "Y"
[12,] "c_d_f" "Y"
出力行列は次のようになります。
a b c d e f X Y
[1,] 1 1 0 0 0 0 1 0
[2,] 1 1 0 0 0 0 1 0
[3,] 1 1 0 0 0 0 1 0
[4,] 1 1 0 0 1 0 1 0
[5,] 1 1 0 0 1 0 1 0
[6,] 1 1 0 0 0 1 1 0
[7,] 0 0 1 1 0 0 0 1
[8,] 0 0 1 1 0 0 0 1
[9,] 0 0 1 1 0 0 0 1
[10,] 0 0 1 1 1 0 0 1
[11,] 0 0 1 1 1 0 0 1
[12,] 0 0 1 1 0 1 0 1
をなど、私は解に近いですが、今ではunique(unlist(strsplit()))
とfor
ループと全く非効率的に見えるが、誰をい例えば、Matrix
パッケージのsparseMatrix
(またはsparse.model.matrix
)を利用する効率的な解決策を知っていますか?
多くの感謝!
'ライブラリ(qdapTools)を試してみてください。 X = rep(c(1,0)、c(6,6))、Y = rep(c(0,1)、c(0,1) 6,6)))) ' – akrun