2013-02-23 111 views
3

我无法将我的数据集加载到R中的稀疏矩阵中。我正在使用Matrix包。我的数据是x y value。例如:将R坐标值对转换为稀疏矩阵

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。我正在用一个7095到5896的矩阵,有247158个值,所以一个for循环是不可能的,除非我只是不耐烦。

我的问题是:在R中执行此操作的首选方法是什么?

更新:

我想通了使用sparseMatrix代替:

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

不明白在其他post

+3

这是SO发布一个改变你的问题? http://stackoverflow.com/questions/1274171/creating-and-accessing-a-sparse-matrix-in-r也就是说,尝试'库(Matrix)'然后'myMatrix < - sparseMatrix(V1,V2,x = V3)' – 2013-02-24 00:15:36

+0

一种方法是包含在这个更一般的答案:http://stackoverflow.com/a/9617424/210673 – Aaron 2013-02-24 13:42:45

回答

4

sparseMatrix的使用让我们假设一个名为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,] . . . . . . . . . . 
+0

谢谢!这解决了我的问题! – 2014-04-12 14:38:42