在R中将大矩阵转换为二进制评级矩阵?

时间:2017-05-23 06:12:18

标签: r matrix

我有一个矩阵,其中包含用户查看过哪个项目的信息,即1 =查看项目,0 =未查看项目。这个矩阵是一个非常大的矩阵,尺寸为9276 x 13068.但每当我尝试使用

将其转换为binaryRatingMatrix时
binmatrix<- as(user_asset_matrix2,"binaryRatingMatrix")
binmatrix
2 x 2 rating matrix of class ‘binaryRatingMatrix’ with 3 ratings.

它形成一个没有用的2x2矩阵。将binmatrix转换回矩阵后,它将转换为:

  0        1 
0 TRUE     TRUE
1 TRUE     FALSE

有人能给我解决这个问题的解决方案吗?

2 个答案:

答案 0 :(得分:1)

我刚刚设法解决了这个问题,虽然我几乎不确定如何......让我试着帮助你。

首先,您确定大矩阵的格式实际上是matrix而不是data.framedata.table?不知何故,这是我的问题......

在任何一种情况下,假设已从具有许多行和两列的事务列表trlist开始获取矩阵,如下所示

    > dim(trlist)
    [1] 100000 2
    > colnames(trlist)
    [1] "customer" "item"

我们可以使用acast中的reshape2获得一个有希望的好客户项目矩阵(请原谅我的强迫症缩进选项):

    product_item <- 
        acast(
            data          = trlist, 
            formula       = customer ~ item,  
            value.var     = item,
            fun.aggregate = length
        )

现在我们应该准备好了:

    product_item    <- as(product_item, "realRatingMatrix")
    sp_product_item <- binarize(product_item, minRating = 1)

如果您所拥有的矩阵不是来自交易列表,您可以使用已加载的melt中的reshape2来获取一个,然后按照前面的步骤。

我无法保证这对你有帮助,但它对我有用:)

答案 1 :(得分:1)

我的代码遇到了类似的问题,即使我的初始数据集有很多评级,也会获得相同的输出。我正在读一个csv文件,事实证明你不能直接将data.frame强制转换为binaryRatingMatrix,而不是先将它转换为数据矩阵:

library(recommenderlab)
csv<-read.csv("csv.csv",header=TRUE,row.names=1)
csv<-as.matrix(csv)
csv<-as(csv,"binaryRatingMatrix)
csv
139x867 rating matrix of class 'binaryRatingMatrix' with 3944 ratings.

当您将csv转换为&#34; binaryRatingMatrix&#34;后,它现在应该显示变量的正确尺寸以及您期望的评级数。