2015-02-10 74 views
4

我試圖從數據框中創建稀疏數據矩陣,而不必構建導致嚴重內存問題的密集矩陣。從數據幀中創建稀疏矩陣

我發現了一個SO下面的帖子裏的解決方案似乎可以找到: Create Sparse Matrix from a data frame

我試過這個解決方案,但它不爲我工作,也許是因爲我的UserIDMovieID沒有按」 T T [開始1

這裏是我的示例代碼:

library(Matrix) 

UserID<-c(10090,10090,10090,10316,10316) 
MovieID <-c(63155,63530,63544,63155,63545) 
Rating <-c(2,2,1,2,1) 
trainingData<-data.frame(UserID,MovieID,Rating) 
trainingData 

UIMatrix <- sparseMatrix(i = trainingData$UserID, 
         j = trainingData$MovieID, 
         x = trainingData$Rating) 

dim(UIMatrix) 

我希望得到一個2×3矩陣,但變暗相當於最大用戶和電影的ID。

我已經嘗試過在帖子中建議的第二個解決方案,但它不會與可能的數據一起工作。

任何人都可以給一些建議嗎?

+1

如果我理解'i,j',這些是行/列索引。因此,trainingData $ UserID'具有行索引'10090,...'並且列索引也很大。因此,矩陣大小將足夠大,以具有那些行/列索引 – akrun 2015-02-10 11:51:12

回答

1

您可以將您的指數轉換爲從as.integer(as.factor(.))開始的指數。

UIMatrix <- sparseMatrix(i = as.integer(as.factor(trainingData$UserID)), 
         j = as.integer(as.factor(trainingData$MovieID)), 
         x = trainingData$Rating) 

dim(UIMatrix) 
# [1] 2 4 

dimnames(UIMatrix) <- list(sort(unique(trainingData$UserID)), 
          sort(unique(trainingData$MovieID))) 

UIMatrix 
# 2 x 4 sparse Matrix of class "dgCMatrix" 
#  63155 63530 63544 63545 
# 10090  2  2  1  . 
# 10316  2  .  .  1 
+0

幾乎完美!我只需要添加暗號。怎麼能得到那個? – Nelson 2015-02-10 16:07:14

+0

@Nelson查看更新。 – 2015-02-10 16:12:27

+0

優秀!!!真的有幫助! – Nelson 2015-02-10 16:14:05