2012-03-19 4 views
2

Я использую R и у меня проблемы с объединением векторов в матрицу.слияния матрицы и векторов с использованием R

Итак, basicaly, вот что у меня есть:

A= 
    ["A"] ["B"] ["C"] ["D"] 
[1,] 0.2 0.1 0.2 0.8 

B= 
    ["A"] ["B"] ["E"] ["F"] ["G"] 
[1,] 0.2 0.1 0.2 1 1.2 

И я хочу, чтобы мой результат будет:

C = 
    ["A"] ["B"] ["E"] ["F"] ["G"] ["C"] ["D"] 
[1,] 0.2 0.1 0.2 0  0 0.2 0.8 
[2,] 0.2 0.1 0.2 1 1.2 0  0  

(порядок строк не имеет значения)


dput(a) 
structure(c(0.2, 0.1, 0.2, 0.8), .Dim = c(1L, 4L), .Dimnames = list(NULL, c("A", "B", "C", "D"))) 

dput(b) 
structure(c(0.2, 0.1, 0.2, 1, 1.2), .Dim = c(1L, 5L), .Dimnames = list(NULL, c("A", "B", "E", "F", "G"))) 
+0

Пожалуйста, прочитанных http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example, а затем обеспечить нас с некоторыми воспроизводимыми данными. На данный момент неясно, в какой структуре находятся ваши данные, т. Е. В векторах или матрицах. Короче: вставьте в свой вопрос результаты 'dput (A)' и dput ('B'). – Andrie

+0

Прошу прощения, вот вам запрос dput(). dput (a) = Структура (c (0.2, 0.1, 0.2, 0.8), .Dim = c (1L, 4L), .Dimnames = list (NULL, c ("A", "B", " C "," D "))) dput (b) = Структура (c (0.2, 0.1, 0.2, 1, 1.2), .Dim = c (1L, 5L), .Dimnames = list (NULL, c («A», «B», «E», «F», «G»))) – user1278743

ответ

2

Пакет plyr имеет rbind.fill для data.frames и rbind.fill.matrix для матриц:

library("plyr") 
ab <- rbind.fill.matrix(a, b) 
ab 
#  A B C D E F G 
# [1,] 0.2 0.1 0.2 0.8 NA NA NA 
# [2,] 0.2 0.1 NA NA 0.2 1 1.2 

Как вы можете видеть, пропущенные значения заполняются NA, но вы можете легко заменить их нулями:

ab[is.na(ab)] <- 0 
ab 
#  A B C D E F G 
# [1,] 0.2 0.1 0.2 0.8 0.0 0 0.0 
# [2,] 0.2 0.1 0.0 0.0 0.2 1 1.2 
+0

О, черт возьми, я ничего не получал с data.frame, не знал, что существует метод для матрицы. Хорошая находка! –

+0

работает отлично, спасибо ^^ – user1278743

2

Вы можете создать матрицу C, а затем заполнить ее значениями м А и В:

C <- array(0, c(2,7), list(NULL, LETTERS[1:7])) 
C[1, colnames(A)] <- A 
C[2, colnames(B)] <- B 
Смежные вопросы