将数据从一个矩阵插入到R中的另一个矩阵

时间:2018-08-29 20:09:07

标签: r matrix

我有一个空矩阵(5000 x 200),其中User.ID为行,电影名称为列名。当前,矩阵中的每个单元格都有一个NA。

现在我有了一个“训练矩阵”-基本上是用于训练的数据集的一个样本,矩阵格式。训练矩阵的尺寸为3500 x 200,但其中填充了用户给特定用户的评级的一些值。

现在我要尝试的是将训练矩阵“叠加”或“插入”到空矩阵中。实际上,在用户对电影评分的情况下,我希望将其插入空白矩阵,但要保留空白矩阵的尺寸。在适用的情况下,将“用户ID”行与“电影名称”列进行基本匹配。有人把我引到complete包中的dplyr函数,但是我不确定如何实现这种解决方案。

1 个答案:

答案 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
>