R 如何将稀疏矩阵转换为普通矩阵?
我有一个稀疏矩阵,表示为R 如何将稀疏矩阵转换为普通矩阵?,r,matrix,sparse-matrix,R,Matrix,Sparse Matrix,我有一个稀疏矩阵,表示为 > (f <- data.frame(row=c(1,2,3,1,2,1,2,3,4,1,1,2),value=1:12)) row value 1 1 1 2 2 2 3 3 3 4 1 4 5 2 5 6 1 6 7 2 7 8 3 8 9 4 9 10 1 10 11 1 11 12 2 12
> (f <- data.frame(row=c(1,2,3,1,2,1,2,3,4,1,1,2),value=1:12))
row value
1 1 1
2 2 2
3 3 3
4 1 4
5 2 5
6 1 6
7 2 7
8 3 8
9 4 9
10 1 10
11 1 11
12 2 12
以下是似乎有效的方法:
> library(Matrix)
> as.matrix(sparseMatrix(i = cumsum(f[[1]] == 1), j=f[[1]], x=f[[2]]))
[,1] [,2] [,3] [,4]
[1,] 1 2 3 0
[2,] 4 5 0 0
[3,] 6 7 8 9
[4,] 10 0 0 0
[5,] 11 12 0 0
除了我必须将0
替换为NA
我自己
有更好的解决方案吗?您可以使用
base
函数执行所有操作。诀窍是通过2列(行和列索引)矩阵使用索引:
没有错。我只质疑
as.matrix
和NA
的用法。如果您真正使用的是大型稀疏矩阵,那么您应该停在sparseMatrix
@flodel:它不大,也不是矩阵。我只使用sparseMatrix
进行解析。
> library(Matrix)
> as.matrix(sparseMatrix(i = cumsum(f[[1]] == 1), j=f[[1]], x=f[[2]]))
[,1] [,2] [,3] [,4]
[1,] 1 2 3 0
[2,] 4 5 0 0
[3,] 6 7 8 9
[4,] 10 0 0 0
[5,] 11 12 0 0
j <- f$row
i <- cumsum(j == 1)
x <- f$value
m <- matrix(NA, max(i), max(j))
m[cbind(i, j)] <- x
m