【发布时间】: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)),] 。如果不行,你真的需要分享更多的数据