在R中填充稀疏矩阵

时间:2013-08-13 07:32:12

标签: r sparse-matrix

我正在填充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,顺序运行需要几个小时。

由于

斯图尔特

2 个答案:

答案 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