【问题标题】:Sort Rating Matrix in RR中的排序评分矩阵
【发布时间】:2020-04-29 11:54:35
【问题描述】:

我制作的评分矩阵有很多 N/A 值(用户评分笑话矩阵)。我需要对矩阵进行排序,其中费率最高的用户位于矩阵的开头,而费率较低的用户位于矩阵的底部。 我的代码:

csv_table=read.csv('Jester5k.csv', header = TRUE, sep = ",", quote = "\"",dec = ".")

Row_num=max(csv_table$user_id)
Num_Unique_usersid=length(unique(csv_table$user_id))
Row_num==Num_Unique_usersid
Unique_users=unique(csv_table$user_id)

Col_num=max(csv_table$jokes)
Num_Unique_jokes=length(unique(csv_table$jokes))
Col_num==Num_Unique_jokes
Unique_jokes=unique(csv_table$jokes)


rownames(Mat_ratings)=paste0("userid_",seq(1:nrow(Mat_ratings)))
colnames(Mat_ratings)=paste0("jokes_",Unique_jokes)


Unique_users_sorted=sort(unique(csv_table$user_id))
identical(Unique_users_sorted,Unique_users)

Unique_items_sorted=sort(unique(csv_table$jokes))
identical(Unique_items_sorted,Unique_jokes)

Mat_ratings=matrix(NA, nrow = Row_num, ncol = Num_Unique_jokes)

rownames(Mat_ratings)=paste0("user_",Unique_users_sorted)
colnames(Mat_ratings)=paste0("item_",Unique_items_sorted)

for (i in 1:nrow(csv_table)){
  Mat_ratings[which(csv_table$user_id[i]==Unique_users_sorted),
              which(csv_table$jokes[i]==Unique_items_sorted)]=
    csv_table$rating[i]
}

首先,我尝试以这种方式对其进行排序,但我知道我并没有真正对这些值做任何事情。 有什么办法吗?

数据样本:

【问题讨论】:

  • 请提供数据样本,以便我们了解我们正在处理的内容。我建议像dput(head(csv_table))
  • 我添加了矩阵的图片,我试试看
  • 拜托,这没有多大帮助。意识到您要求我们不仅帮助您解决问题,而且花费不必要的时间转录您的数据。请使用我的建议。但是,根据矩阵的表观大小,dput(m[1:10,1:10]) 可能会提供足够的数据。 (我们可能不需要查看所有数百列,也许只需几个就足以建议一种方法。)
  • 我强烈建议按照 r2evans 的建议执行例如 dput()。是 Mat_ratings 吗?你可以试试 Mat_ratings[order(rowSums(is.na(Mat_ratings)),] 。如果不行,你真的需要分享更多的数据

标签: r sorting matrix rating


【解决方案1】:

我会补一些样本数据:

mtx <- matrix(sample(5, size = 28, replace = TRUE), nrow = 7, ncol = 4)
dimnames(mtx) <- list(paste0("user_", 1:7), paste0("item_", 1:4))
set.seed(42)
mtx[sample(28, size = 10)] <- NA
mtx
#        item_1 item_2 item_3 item_4
# user_1      3     NA      1      5
# user_2      4      3     NA      2
# user_3     NA      3     NA      4
# user_4      2      5      5      1
# user_5      3     NA      3     NA
# user_6      5      5     NA      1
# user_7      5     NA     NA     NA

从这里,只需使用rowSumsorder

mtx[order(rowSums(is.na(mtx))),]
#        item_1 item_2 item_3 item_4
# user_4      2      5      5      1
# user_1      3     NA      1      5
# user_2      4      3     NA      2
# user_6      5      5     NA      1
# user_3     NA      3     NA      4
# user_5      3     NA      3     NA
# user_7      5     NA     NA     NA

如果您有用于排序的次要因素,请将它们包含在 order 调用中。

【讨论】:

    猜你喜欢
    • 2018-03-15
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多