R convertir de la matrice ou de la trame de données à sparseMatrix
J'ai un régulier de la matrice (non fragmentée) que je voudrais convertir en sparseMatrix
(à l'aide de la Matrix
package). Est-il une fonction pour faire cela ou dois-je besoin de faire un tas de boucles?
ex.
> regMat <- matrix(0, nrow=10, ncol=10)
> regMat[3,5] <- round(runif(1),2)*100
> regMat[2,8] <- round(runif(1),2)*100
> regMat[8,4] <- round(runif(1),2)*100
> regMat[1,6] <- round(runif(1),2)*100
> regMat[7,4] <- round(runif(1),2)*100
> regMat
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 0 0 0 0 0 49 0 0 0 0
[2,] 0 0 0 0 0 0 0 93 0 0
[3,] 0 0 0 0 20 0 0 0 0 0
[4,] 0 0 0 0 0 0 0 0 0 0
[5,] 0 0 0 0 0 0 0 0 0 0
[6,] 0 0 0 0 0 0 0 0 0 0
[7,] 0 0 0 8 0 0 0 0 0 0
[8,] 0 0 0 14 0 0 0 0 0 0
[9,] 0 0 0 0 0 0 0 0 0 0
[10,] 0 0 0 0 0 0 0 0 0 0
Des suggestions?
- mineur suggestion pour la fabrication de vos données-échantillon:
regMat[cbind(c(3,2,8,1,7),c(5,8,4,6,4))] <- round(runif(5,0,100))
Vous devez vous connecter pour publier un commentaire.
Voici deux options:
Matrix(regMat, sparse=TRUE)
De Josh réponse est bien, mais voici plus d'options et d'explication.
Pointilleux Nit "j'ai un régulier de la matrice (non fragmentée)..." en Fait vous ne ont un sparse matrix (matrice, avec la plupart de 0s); c'est seulement en format non compressé. Votre but est de le mettre dans un stockage compressé au format.
Matrices creuses peuvent être compressés dans plusieurs formats de stockage. Comprimé Colonne Fragmentée (SCC) et Compressed Sparse Row (RSE) sont les deux dominantes formats.
as(regMat, "sparseMatrix")
convertit votre matrice de typedgCMatrix
qui est compressé colonne fragmentée. C'est généralement ce que vous voulez, mais je préfère être explicite à ce sujet.Alors que celles-ci ressemblent et se comportent de la même manière sur la surface, en interne, ils stockent les données différemment. Le SCC est plus rapide pour la récupération des colonnes de données bien que la RSE est plus rapide pour la récupération des lignes. Ils prennent également en place de différentes quantités d'espace en fonction de la structure de vos données.
En outre, dans cet exemple, vous êtes à la conversion d'un non compressé sparse matrix pour une compressé. Habituellement, vous faites cela pour économiser de la mémoire, de sorte que la construction d'une non compressé de la matrice juste pour le convertir en format compressé défait le but. Dans la pratique, il est plus commun de construire un compressed sparse matrix à partir d'un tableau de (ligne, colonne, valeur), des triplés. Vous pouvez faire cela avec de la Matrice de
sparseMatrix()
fonction.Shameless Plug - j'ai article du blog de l'couvrant ce genre de choses et plus si vous êtes intéressé.
Pour la matrice, quelqu'un a déjà une réponse.
Pour les données.de la table, il y a un paquet a fait le travail.