слияние матрицы и векторов с использованием R - PullRequest
2 голосов
/ 19 марта 2012

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

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

 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")))

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

Пакет 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
2 голосов
/ 19 марта 2012

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

C <- array(0, c(2,7), list(NULL, LETTERS[1:7]))
C[1, colnames(A)] <- A
C[2, colnames(B)] <- B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...