在R中合并两个不同大小的dgCMatrix稀疏矩阵

Flo*_*Flo 2 merge r matrix sparse-matrix

如何dgCMatrix在R中合并两个大型(大约500k列和行)稀疏矩阵的正规类稀疏矩阵(不同的列和行)?

简单的例子:我有一个完整的6x6矩阵

1 2 3 4 5 6
1 0 0 0 0 0 0
2 0 0 0 0 0 0
3 0 0 0 0 0 0
4 0 0 0 0 0 0
5 0 0 0 0 0 0
6 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

现在我想合并不同大小的第二个矩阵:

3 4 5 6
1 0 1 0 0 
3 0 0 1 0 
4 1 0 0 0 
Run Code Online (Sandbox Code Playgroud)

结果应该是:

1 2 3 4 5 6
1 0 0 0 1 0 0
2 0 0 0 0 0 0
3 0 0 0 0 1 0
4 1 0 0 0 0 0
5 0 0 0 0 0 0
6 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

我尝试cbindX并合并但两者都不起作用:

只能使用矩阵和data.frames

要么

不能强制类"*structure("dgCMatrix",package ="Matrix")""到data.frame.

但是,我无法将此sparse=FALSE矩阵更改为矩阵类,如本文中的建议或data.frame,因为在这种情况下R不能再处理我的机器上的矩阵大小.

任何帮助将受到高度赞赏.谢谢!

All*_*ang 6

一种策略是将矩阵转换回相同的大小然后添加它们.

A <- sparseMatrix(8, 8, x = 1)
B <- sparseMatrix(c(1,3,5), c(3,6,3), x = c(1,4,1))
Run Code Online (Sandbox Code Playgroud)

您可以使用summary(B)sparseMatrix(i,j,x,dims)重新创建矩阵B的索引,就像在R中进行正常的子集化操作一样:

> summary(B)
5 x 6 sparse Matrix of class "dgCMatrix", with 3 entries 
  i j x
1 1 3 1
2 5 3 1
3 3 6 4

B <- sparseMatrix(i = summary(B)$i, j = summary(B)$j, x = summary(B)$x, dims = dim(A))
Run Code Online (Sandbox Code Playgroud)

然后你可以添加矩阵:

A = A + B
Run Code Online (Sandbox Code Playgroud)