我有25個稀疏矩陣的大列表(他們真的很大 - 其中一個100M或更多的元素),我需要將它們合併成一個大的稀疏矩陣。如何合併大的稀疏矩陣
例如:一個矩陣A可以像這樣(我的真實100M元素的矩陣的它的子矩陣):
> A
5 x 4 sparse Matrix of class "dgCMatrix"
SKU
CustomerID 404 457 547 558
100002_24655 1 . . .
100003_46919 . 1 1 .
100007_46702 . . . .
100012_47709 . . . .
100013_46132 1 1 1 1
> dput(A)
new("dgCMatrix"
, i = c(0L, 4L, 1L, 4L, 1L, 4L, 4L)
, p = c(0L, 2L, 4L, 6L, 7L)
, Dim = c(5L, 4L)
, Dimnames = structure(list(CustomerID = c("100002_24655", "100003_46919",
"100007_46702", "100012_47709", "100013_46132"), SKU = c("404",
"457", "547", "558")), .Names = c("CustomerID", "SKU"
))
, x = c(1, 1, 1, 1, 1, 1, 1)
, factors = list()
)
其他B可以是這樣的:
> B
7 x 5 sparse Matrix of class "dgCMatrix"
SKU
CustomerID 191 404 558 715 787
100002_24655 . . . . .
100007_46702 1 1 1 1 1
100012_47709 . . 1 . .
100013_46132 . . . . 1
100014_46400 . . . . .
100014_605414 1 1 1 . .
100014_631294 . . 1 1 1
> dput(B)
new("dgCMatrix"
, i = c(1L, 5L, 1L, 5L, 1L, 2L, 5L, 6L, 1L, 6L, 1L, 3L, 6L)
, p = c(0L, 2L, 4L, 8L, 10L, 13L)
, Dim = c(7L, 5L)
, Dimnames = structure(list(CustomerID = c("100002_24655", "100007_46702",
"100012_47709", "100013_46132", "100014_46400", "100014_605414",
"100014_631294"), SKU = c("191", "404", "558", "715",
"787")), .Names = c("CustomerID", "SKU"))
, x = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
, factors = list()
)
輸出應該看起來像這樣:(第一部分是第一個矩陣,第二個是第二個矩陣 - 我用空格分開以便更好地查看)
12 x 7 sparse Matrix of class "dgCMatrix"
404 457 547 558 191 715 787
[1, ] 1 . . . . . .
[2, ] . 1 1 . . . .
[3, ] . . . . . . .
[4, ] . . . . . . .
[5, ] 1 1 1 1 . . .
[6, ] . . . . . . .
[7, ] 1 . . 1 1 1 1
[8, ] . . . 1 . . .
[9, ] . . . . . . 1
[10,] . . . . . . .
[11,] 1 . . 1 1 . .
[12,] . . . 1 . 1 1
這意味着我想按列名進行合併。那麼我怎麼能合併所有的25稀疏矩陣?
'>升< - 列表(A,B,C,......) > do.call(rbind,l)的' – Sagar
@Sagar矩陣必須有相同的列數,如果你想使用rbind –
@MartinaZapletalová - 我沒有意識到它們的列數有所不同......我的不好。 – Sagar