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