我正在完成一个作业,尝试为Netflix奖数据构建协同过滤模型。我使用的数据在CSV文件中,很容易导入到数据框中。现在我需要创建一个稀疏矩阵,以用户为行,电影为列,并且每个单元格由相应的评分值填充。当我尝试映射数据框中的值时,我需要对数据框中的每一行运行循环,这在R中需要很长时间,请问有没有更好的方法?下面是示例代码和数据:
buildUserMovieMatrix <- function(trainingData)
{
UIMatrix <- Matrix(0, nrow = max(trainingData$UserID), ncol = max(trainingData$MovieID), sparse = T);
for(i in 1:nrow(trainingData))
{
UIMatrix[trainingData$UserID[i], trainingData$MovieID[i]] = trainingData$Rating[i];
}
return(UIMatrix);
}
正在创建稀疏矩阵的数据框中的数据示例:
MovieID UserID Rating
1 1 2 3
2 2 3 3
3 2 4 4
4 2 6 3
5 2 7 3
最终我需要的是这样一个表格:列是电影ID,行是用户ID。
1 2 3 4 5 6 7
1 0 0 0 0 0 0 0
2 3 0 0 0 0 0 0
3 0 3 0 0 0 0 0
4 0 4 0 0 0 0 0
5 0 0 0 0 0 0 0
6 0 3 0 0 0 0 0
7 0 3 0 0 0 0 0
所以解释大概是这样的:用户2将电影1评为3星,用户3将电影2评为3星,其他用户和电影也是如此。我的数据框中有约8500000行数据,我的代码需要30-45分钟才能创建此用户项目矩阵,我希望得到任何建议。