2012-05-11 293 views
20

我有一個常規矩陣(非稀疏),我想將其轉換爲sparseMatrix(使用Matrix包)。有沒有這樣做的功能,或者我需要做一堆循環?R將矩陣或數據幀轉換爲稀疏矩陣

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 

有什麼建議嗎?

+4

,讓你的樣本數據未成年人的建議:'regMat [cbind(C(3,2,8,1,7),C(5,8,4,6 ,4))] < - round(runif(5,0,100))' – Aaron

回答

30

這裏有兩種選擇:

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

也'矩陣(regMat,sparse = TRUE)' – Aaron

+0

謝謝@Aaron。作爲第二種選擇,我不知道這個成語,但已將它添加到答案中。 –