繁体   English   中英

如何将此稀疏矩阵转换为正常矩阵?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM