5

空の行列に別の行列の値をどのように入力しますか?

空行列:

> m1 <- matrix(ncol=8, nrow=8)
> rownames(m1) <- c('a','b','c','d','e','f','g','h')
> colnames(m1) <- c('a','b','c','d','e','f','g','h')
> m1
   a  b  c  d  e  f  g  h
a NA NA NA NA NA NA NA NA
b NA NA NA NA NA NA NA NA
c NA NA NA NA NA NA NA NA
d NA NA NA NA NA NA NA NA
e NA NA NA NA NA NA NA NA
f NA NA NA NA NA NA NA NA
g NA NA NA NA NA NA NA NA
h NA NA NA NA NA NA NA NA

空の行列に値を入力する行列:

> m2 <- matrix(ncol=4, nrow=4)
> rownames(m2) <- c('b','e','h','x')
> colnames(m2) <- c('b','e','h','x')
> m2[,'b'] <- c(1,2,3,1)
> m2[,'e'] <- c(2,1,1,5)
> m2[,'h'] <- c(3,1,3,5)
> m2[,'x'] <- c(1,5,5,1)
> m2
  b e h x
b 1 2 3 1
e 2 1 1 5
h 3 1 3 5
x 1 5 5 1

この結果を得るには、2 つのマトリックスをどのようにマージしますか。

   a  b  c  d  e  f  g  h
a NA NA NA NA NA NA NA NA
b NA  1 NA NA  2 NA NA  3
c NA NA NA NA NA NA NA NA
d NA NA NA NA NA NA NA NA
e NA  2 NA NA  1 NA NA  1
f NA NA NA NA NA NA NA NA
g NA NA NA NA NA NA NA NA
h NA  3 NA NA  1 NA NA  3

編集x: m1にはないm2に行/列を追加しました

4

1 に答える 1

11

両方の行列に共通する列 (行) 名を見つけます

cols <- colnames(m1)[colnames(m1) %in% colnames(m2)]
rows <- rownames(m1)[rownames(m1) %in% rownames(m2)]

m2次に、適切な値を からに割り当てますm1

m1[rows, cols] <- m2[rows, cols]
m1
#   a  b  c  d  e  f  g  h
#a NA NA NA NA NA NA NA NA
#b NA  1 NA NA  2 NA NA  3
#c NA NA NA NA NA NA NA NA
#d NA NA NA NA NA NA NA NA
#e NA  2 NA NA  1 NA NA  1
#f NA NA NA NA NA NA NA NA
#g NA NA NA NA NA NA NA NA
#h NA  3 NA NA  1 NA NA  3
于 2012-06-17T22:36:49.707 に答える