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

标签 r matrix merge sparse-matrix

我如何在 R 中合并两个大的(大约 500k 列和行)稀疏矩阵的形式类 dgCMatrix 具有不同的大小(列和行方面)?

简单的例子:我有一个完整的 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

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

3 4 5 6
1 0 1 0 0 
3 0 0 1 0 
4 1 0 0 0 

结果应该是:

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

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

only matrices and data.frames can be used

cannot coerce class "*structure("dgCMatrix", package = "Matrix")" to a data.frame.

但是,我无法按照此处的建议将矩阵更改为 sparse=FALSE 矩阵类 in this post或 data.frame,因为在这种情况下,R 无法再处理我机器上的矩阵大小。

任何帮助将不胜感激。谢谢!

最佳答案

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

A <- sparseMatrix(8, 8, x = 1)
B <- sparseMatrix(c(1,3,5), c(3,6,3), x = c(1,4,1))

您可以使用 summary(B) 访问矩阵 B 的索引,然后使用 sparseMatrix(i,j,x,dims) 重新创建矩阵,就像您在 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))

然后你可以添加矩阵:

A = A + B

关于r - 在 R 中合并两个不同大小的 dgCMatrix 稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31827512/

相关文章:

r - 使用plot()然后使用lines()时,线条未显示在R的折线图上

matlab - 在matlab中制作增广矩阵,并减少行阶梯形式

java - 在 adj 矩阵图中找到最大的连通分量?

r - 通过行名合并R中的两个以上数据帧

android - 编译错误说资源名称必须以字母开头

eclipse - SVN:在 Eclipse 中将分支与主干同步?

r - ggplot2 的facet_grid 内部元素中具有多个重复值的不同重新排序

r - 减少整体图例大小(元素和文本)

r - 不均匀类别上的小平面条形图

python - Python 中的 OpenGL 透视矩阵