3

データ セットを R のスパース マトリックスにロードする際に問題が発生しています。Matrix パッケージを使用しています。私が持っているデータは形式x y valueです。例えば:

  V1 V2 V3
  1  2  .34
  7  4  .56
  4  5  .62

同等のことをしたい場所

myMatrix[1,2] = .34
myMatrix[7,4] = .56 
myMatrix[4,5] = .62 

自動化された方法で。

私は次のようなことをしたい:

myMatrix = Matrix(nrow=numrows, ncol=numcols)
myMatrix[mydata[1:numrows, 1], mydata[1:numrows, 2]] <- mydata[1:numrows, 3]

しかし、数値行列が必要な場合、これにより行列が lgeMatrix になります。

私も試しました:

myMatrix = Matrix(nrow=numrows, ncol=numcols)
for(i in 1:numrows){
    myMatrix[mydata[i, 1], mydata[i, 2]] <- mydata[i, 3]
}

これにより、必要な種類のマトリックスが作成されますが、時間がかかりすぎます (5 分以上)。停止するときに最初のいくつかの値をチェックし、それらは正しいが、最後の値は NA であるため、機能することはわかっています。入力する値が 247158 の 7095 x 5896 のマトリックスを使用しているので、焦っているだけでない限り、for ループは問題外です。

私の質問は次のとおりです。Rでこれを行うための好ましい方法は何ですか?

アップデート:

代わりに使用してそれを理解しましたsparseMatrix

myMatrix = sparseMatrix(i = mydata[1:numrows,1], j = mydata[1:numrows,2],
                     x = mydata[1:numrows,3])

他の投稿sparseMatrixでの使用法を理解していませんでした

4

1 に答える 1

6

それがdatという名前のデータフレームであるとしましょう:

myMatrix = Matrix(0, nrow=10, ncol=10)
# Notice that you need to specify zero values to make it sparse.
myMatrix[cbind(dat$V1, dat$V2)] <- dat$V3
myMatrix
#--------------
10 x 10 sparse Matrix of class "dgCMatrix"

 [1,] . 0.34 . .    .    . . . . .
 [2,] . .    . .    .    . . . . .
 [3,] . .    . .    .    . . . . .
 [4,] . .    . .    0.62 . . . . .
 [5,] . .    . .    .    . . . . .
 [6,] . .    . .    .    . . . . .
 [7,] . .    . 0.56 .    . . . . .
 [8,] . .    . .    .    . . . . .
 [9,] . .    . .    .    . . . . .
[10,] . .    . .    .    . . . . .
于 2013-02-24T09:51:41.513 に答える