如何在R中使用另一个矩阵的值填充矩阵?

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

你如何合并这两个矩阵以得到以下结果:
   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

编辑:在m2中添加了行/列x,而这在m1中不存在。

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

我编辑了我的问题。在m1中使用x,R会给出“索引超出范围”的错误。 - R-obert
你想要忽略 x 吗,还是想让 m1 增加一个名为 x 的行和列? - GSee
忽略,如同我的问题的结果矩阵。 - R-obert
你好 - 感谢你提出有用的问题和出色的答案(两个都点赞了)。我想知道你如何调整它以允许在m1中具有相同名称的多列/行? - QPaps
这是一个相当老的问题,所以我添加了一个新问题,并指定这是原始帖子的扩展。请在此处查看新链https://stackoverflow.com/questions/66476768/how-to-fill-in-matrix-with-values-from-another-matrix-with-repeat-columns-and-ro - QPaps

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接