gpt4 book ai didi

r - 在行上绑定(bind)不同大小的稀疏矩阵

转载 作者:行者123 更新时间:2023-12-04 23:15:47 25 4
gpt4 key购买 nike

我正在尝试使用 Matrix 包将两个不同大小的稀疏矩阵绑定(bind)在一起。绑定(bind)在行上,使用列名进行匹配。

表A:

ID     | AAAA   | BBBB   |
------ | ------ | ------ |
XXXX | 1 | 2 |

表 B:
ID     | BBBB   | CCCC   |
------ | ------ | ------ |
YYYY | 3 | 4 |

绑定(bind)表A和B :
ID     | AAAA   | BBBB   | CCCC   |
------ | ------ | ------ | ------ |
XXXX | 1 | 2 | |
YYYY | | 3 | 4 |

目的是将大量小矩阵插入到单个大矩阵中,以实现连续查询和更新/插入。

我发现 Matrix 或 slam 软件包都没有处理这个问题的功能。

过去也有人问过类似的问题,但似乎没有找到解决方案:

帖子1: in-r-when-using-named-rows-can-a-sparse-matrix-column-be-added-concatenated

帖子2: bind-together-sparse-model-matrices-by-row-names

关于如何解决它的想法将不胜感激。

最好的祝福,

弗雷德里克

最佳答案

对于我的目的(具有数百万行和数万列的非常稀疏的矩阵,超过 99.9% 的值是空的),这仍然太慢了。有效的是下面的代码 - 也可能对其他人有帮助:

merge.sparse = function(listMatrixes) {
# takes a list of sparse matrixes with different columns and adds them row wise

allColnames <- sort(unique(unlist(lapply(listMatrixes,colnames))))
for (currentMatrix in listMatrixes) {
newColLocations <- match(colnames(currentMatrix),allColnames)
indexes <- which(currentMatrix>0, arr.ind = T)
newColumns <- newColLocations[indexes[,2]]
rows <- indexes[,1]
newMatrix <- sparseMatrix(i=rows,j=newColumns, x=currentMatrix@x,
dims=c(max(rows),length(allColnames)))
if (!exists("matrixToReturn")) {
matrixToReturn <- newMatrix
}
else {
matrixToReturn <- rbind2(matrixToReturn,newMatrix)
}
}
colnames(matrixToReturn) <- allColnames
matrixToReturn
}

关于r - 在行上绑定(bind)不同大小的稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43117608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com