[英]How do I convert this sparse matrix to the normal one?
我有一个稀疏矩阵表示为
> (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
除了我自己必须用NA
替换0
。
有更好的解决方案吗?
您可以使用base
功能完成所有工作。 诀窍是使用2-col(行和列索引)矩阵进行索引:
j <- f$row
i <- cumsum(j == 1)
x <- f$value
m <- matrix(NA, max(i), max(j))
m[cbind(i, j)] <- x
m
是否比使用Matrix
包更好或更好是主观的。 如果你没有做任何其他事情,我认为有点过分。 此外,如果您的数据在f $ value列中为0
,那么如果您不太小心,它们最终会被转换为NA
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.