Вставка данных из одной матрицы в другую в R - PullRequest
0 голосов
/ 29 августа 2018

У меня есть пустая матрица (5000 x 200) с User.ID в виде строк и имен фильмов в качестве имен столбцов. В настоящее время каждая ячейка в матрице имеет NA.

Теперь у меня есть «тренировочная матрица» - в основном образец набора данных, используемого для обучения, в матричном формате. Матрица обучения имеет размеры 3500 x 200, но с некоторыми значениями, заполненными для оценок, которые пользователи дали конкретным пользователям.

Теперь я пытаюсь «наложить» или «вставить» тренировочную матрицу в пустую матрицу. Фактически, когда пользователь оценил фильм, я бы хотел, чтобы он был вставлен в пустую матрицу, но с сохранением размеров пустой матрицы. По существу сопоставьте строку «Идентификатор пользователя» со столбцом «название фильма», где это применимо. Кто-то направил меня к функции complete из пакета dplyr, но я не совсем уверен, как бы я реализовал такое решение.

1 Ответ

0 голосов
/ 29 августа 2018

Хорошо, предположим, у вас есть тренировочная матрица с (истинными) именами строк:

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
> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...