2012-05-11 23 views
20

Mam regularną macierz (nieskalowaną), którą chciałbym przekonwertować na sparseMatrix (używając pakietu Matrix). Czy istnieje funkcja do wykonania tej czynności lub czy muszę wykonać kilka pętli?Konwersja macierzy R lub ramki danych na SparseMatrix

np.

> 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 

Wszelkie sugestie?

+4

moll propozycja dla dokonywania przykładowych danych: 'regMat [cbind (C (3,2,8,1,7), C (5,8,4,6 , 4))] <- round (runif (5,0,100)) ' – Aaron

Odpowiedz

30

Oto dwie opcje:

library(Matrix) 

A <- as(regMat, "sparseMatrix")  # see also `vignette("Intro2Matrix")` 
B <- Matrix(regMat, sparse = TRUE) # Thanks to Aaron for pointing this out 

identical(A, B) 
# [1] TRUE 
A 
# 10 x 10 sparse Matrix of class "dgCMatrix" 
#        
# [1,] . . . . . 45 . . . . 
# [2,] . . . . . . . 59 . . 
# [3,] . . . . 95 . . . . . 
# [4,] . . . . . . . . . . 
# [5,] . . . . . . . . . . 
# [6,] . . . . . . . . . . 
# [7,] . . . 23 . . . . . . 
# [8,] . . . 63 . . . . . . 
# [9,] . . . . . . . . . . 
# [10,] . . . . . . . . . . 
+5

również' Matrix (regMat, sparse = TRUE) ' – Aaron

+0

Dzięki @Aaron. Nie wiedziałem o tym idiomie, ale dodałem go do odpowiedzi jako drugą opcję. –

Powiązane problemy