我有一个空矩阵(5000 x 200),其中User.ID为行,电影名称为列名。当前,矩阵中的每个单元格都有一个NA。
现在我有了一个“训练矩阵”-基本上是用于训练的数据集的一个样本,矩阵格式。训练矩阵的尺寸为3500 x 200,但其中填充了用户给特定用户的评级的一些值。
现在我要尝试的是将训练矩阵“叠加”或“插入”到空矩阵中。实际上,在用户对电影评分的情况下,我希望将其插入空白矩阵,但要保留空白矩阵的尺寸。在适用的情况下,将“用户ID”行与“电影名称”列进行基本匹配。有人把我引到complete
包中的dplyr
函数,但是我不确定如何实现这种解决方案。
答案 0 :(得分:1)
好的,假设您有一个带有(真)行名的训练矩阵:
m <- rbind(c(10,8,2),
c(9,8,7),
c(10,6,5))
rownames(m) <- c("Bob", "Denise", "Ernie")
其中:
> class(m)
[1] "matrix"
> m
[,1] [,2] [,3]
Bob 10 8 2
Denise 9 8 7
Ernie 10 6 5
>
和更大的空白输出矩阵:
e <- matrix(NA_real_, nrow=5, ncol=3)
rownames(e) <- c("Alice", "Bob", "Carla", "Denise", "Ernie")
其中:
> e
[,1] [,2] [,3]
Alice NA NA NA
Bob NA NA NA
Carla NA NA NA
Denise NA NA NA
Ernie NA NA NA
>
在这种情况下,可以使用match()
函数在空的输出矩阵中生成与输入矩阵中的行匹配的行索引向量:
o <- match(rownames(m), rownames(e))
if (any(is.na(o))) stop("oops -- didn't match everyone")
给予:
> o
[1] 2 4 5
>
然后:
e[o,] <- m
输出矩阵将具有所需的内容:
> e
[,1] [,2] [,3]
Alice NA NA NA
Bob 10 8 2
Carla NA NA NA
Denise 9 8 7
Ernie 10 6 5
>