我有一个类似于以下内容的数据框:
sparsed <-
structure(list(Movie = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4,
4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 8), User = c(32, 2, 56, 34,
56, 89, 4, 2, 46, 89, 67, 56, 12, 35, 89, 2, 90, 12, 5, 78, 69,
32, 64, 56, 2), Rating = c(1L, 3L, 2L, 4L, 5L, 3L, 2L, 3L, 4L,
5L, 2L, 3L, 5L, 1L, 2L, 3L, 4L, 5L, 4L, 3L, 3L, 2L, 2L, 1L, 1L
)), .Names = c("Movie", "User", "Rating"), row.names = c(NA,
-25L), class = "data.frame")
将值放入稀疏矩阵的逻辑是什么?为了将其放入尺寸正确的稀疏矩阵(8 x 15)中,我必须执行以下奇数转换,否则结果为8 x 90。
library(Matrix)
sparsed$Movie <- as.factor(as.character(sparsed$Movie))
sparsed$User <- as.factor(as.character(sparsed$User))
sparse <- sparseMatrix(i = as.numeric(sparsed$Movie),
j = as.numeric(sparsed$User),
x = as.numeric(sparsed$Rating))
#8 x 15 sparse Matrix of class "dgCMatrix"
#[1,] . 3 1 . . . . . 2 . . . . . .
#[2,] . . . 4 . . . . 5 . . . . 3 .
#[3,] . 3 . . . 2 4 . . . 2 . . 5 .
#[4,] 5 . . . . . . . 3 . . . . . .
#[5,] 5 3 . . 1 . . 4 . . . . 3 2 4
#[6,] . . 2 . . . . . . . . 3 . . .
#[7,] . . . . . . . . 1 2 . . . . .
#[8,] . 1 . . . . . . . . . . . . .
我现在对尺寸感到满意,但是矩阵列的顺序不正确。例如,第一列对应于影片12,而不是2。行的顺序正确地按数字顺序。谁能解释一下?有什么好方法可以按正确的顺序排列列?
答案 0 :(得分:0)
sparseMatrix
没有做错任何事情。
在将sparsed
列最终转换为因数之前,Movie
和User
是数字,所以2是2,12是12。max(Movie)
是8并且{{ 1}}是90,因此您将获得8 x 90的矩阵。
将这些列转换为因子后,您是否知道因子水平?
max(User)
级别不匹配数字顺序,例如12领先于2。如果对这些因子进行levels(sparsed$Movie)
#[1] "1" "2" "3" "4" "5" "6" "7" "8"
levels(sparsed$User)
#[1] "12" "2" "32" "34" "35" "4" "46" "5" "56" "64" "67" "69" "78" "89" "90"
,则第一个级别“ 12”将出现在第一矩阵列中,级别“ 32”将出现出现在第三列。如果希望它们以正确的数字顺序排列,请使用as.numeric
而不是factor
来控制电平:
as.factor