Объединить / сопоставить / объединить векторы по именам строк - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть вектор имен переменных и несколько матриц с одиночными строками.

Я хочу создать новую матрицу.Новая матрица создается путем сопоставления / слияния имен строк матриц с единственными строками.

Пример:

Вектор имен переменных

Complete_names <- c("D","C","A","B")

Несколько матриц с одиночными строками

Matrix_1 <- matrix(c(1,2,3),3,1)
rownames(Matrix_1) <- c("D","C","B")

Matrix_2 <- matrix(c(4,5,6),3,1)
rownames(Matrix_1) <- c("A","B","C")

Желаемый вывод:

Desired_output <- matrix(c(1,2,NA,3,NA,6,4,5),4,2)
rownames(Desired_output) <- c("D","C","A","B")

 [,1] [,2]
D    1   NA
C    2    6
A   NA    4
B    3    5

Я знаю, что есть несколько подобных сообщений, но эти предыдущие ответы не совсем подходят для этого.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Ответы, предложенные Julius Vainora и achimneyswallow, работают хорошо, но только для того, чтобы точно получить желаемый результат, я хочу:

temp <- merge(Matrix_1, Matrix_2, by = "row.names", all = TRUE)
temp$Row.names <- factor(temp$Row.names, levels=Complete_names)
temp <- temp[order(temp$Row.names),]
rownames(temp) <- temp[,1]
Desired_output <- as.matrix(temp[,-1])

  V1.x V1.y
D    1   NA
C    2    6
A   NA    4
B    3    5
0 голосов
/ 29 ноября 2018

Основная работа может быть выполнена с помощью merge, возвращая фрейм данных:

merge(Matrix_1, Matrix_2, by = "row.names", all = TRUE)
#   Row.names V1.x V1.y
# 1         A   NA    4
# 2         B    3    5
# 3         C    2    6
# 4         D    1   NA

В зависимости от ваших целей вы можете затем дополнительно изменить имена или избавиться от Row.names.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...