我正在填充R中的稀疏矩阵,并在for循环中编写了更新,但希望得到一些指针以使其更快。以下是一些示例代码:
library(Matrix)
rowId <- rep(c(101:105), 2)
colId <- rep(c("A", "B"), 5)
count <- 1:10
data <- data.frame(as.character(rowId), colId, count)
names(data) <- c("rowId", "colId", "count")
sparse <- Matrix(nrow = 5, ncol=2, byrow=TRUE,
dimnames = list(unique(rowId), unique(colId)))
for (i in 1:nrow(data)) {
sparse[data$rowId[i], data$colId[i]] <- data$count[i]
}
有更好的方法来更新稀疏矩阵吗?在我的现实世界问题中,数据有大约100万个观测值,稀疏数据是25000x38242,顺序运行需要几个小时。
由于
斯图尔特
答案 0 :(得分:0)
因此,填充稀疏矩阵的链接需要传入2个向量作为行/列值。所以我这是数据框架,它工作:
library(Matrix)
rowId <- rep(c(101:105), 2)
colId <- rep(c("A", "B"), 5)
count <- 1:10
rowIndex <- as.factor(rowId)
colIndex <- as.factor(colId)
rowIndex <- as.numeric(rowIndex)
colIndex <- as.numeric(colIndex)
data <- data.frame(rowIndex, rowId, colIndex, colId, count)
sparse <- sparseMatrix(i=data$rowIndex, j=data$colIndex, x=data$count,
dimnames = list(unique(rowId), unique(colId)))
答案 1 :(得分:0)
你快到了!实际上,您可以使用表中的数据作为矩阵中的索引在一行中执行此操作:
sparse[data$rowId,data$colId]<-data$count
sparse
5 x 2 Matrix of class "dgeMatrix"
A B
101 6 6
102 7 7
103 8 8
104 9 9
105 10 10