【发布时间】:2014-02-09 07:02:52
【问题描述】:
我有一个稀疏矩阵表示为
> (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
此处第一列始终存在(实际上,前几列存在,其余不存在)。
我想把数据变成矩阵格式:
> t(matrix(c(1,2,3,NA,4,5,NA,NA,6,7,8,9,10,NA,NA,NA,11,12,NA,NA),nrow=4,ncol=5))
[,1] [,2] [,3] [,4]
[1,] 1 2 3 NA
[2,] 4 5 NA NA
[3,] 6 7 8 9
[4,] 10 NA NA NA
[5,] 11 12 NA NA
这似乎是有效的:
> 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。
有没有更好的解决方案?
【问题讨论】:
-
没有错。我只质疑
as.matrix和NA的使用。如果您真的在使用大型稀疏矩阵,您应该停止在sparseMatrix。 -
@flodel:它不大,也不是矩阵。我只使用
sparseMatrix进行解析。
标签: r matrix sparse-matrix