我在将数据集加载到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。我正在使用7095乘5896矩阵,输入247158值,因此for循环是不可能的,除非我只是不耐烦。
我的问题是:在R中执行此操作的首选方法是什么?
更新
我用sparseMatrix
来代替:
myMatrix = sparseMatrix(i = mydata[1:numrows,1], j = mydata[1:numrows,2],
x = mydata[1:numrows,3])
无法理解其他post
中的sparseMatrix
用法
答案 0 :(得分:5)
我们假设这是一个名为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,] . . . . . . . . . .