如何用r中的另一个矩阵用for循环改变矩阵的值?

时间:2014-10-24 17:18:50

标签: r if-statement for-loop matrix

我有两个矩阵; m1和m2

m1:
  a  b  c  d  e
x 0  0  0  0  0
y 0  0  0  0  0
x 0  0  0  0  0


m2:
  y
a 1.2
c 1.5
e 1.4

这是我的代码;

 for (i in 1:4){
   if colnames(m1[i]) in rownanmes(m2[i])
        m1["y", i] == m2[i]
 }
到目前为止,我得到了这个矩阵,

  a    b    c    d  e
x 0    0    0    0  0
y 1.2  1.5  1.4  NA NA
x 0    0    0    0  0

但我想创建这样的矩阵;

  a    b  c    d  e
x 0    0  0    0  0
y 1.2  0  1.5  0  1.4
x 0    0  0    0  0

有什么建议吗?感谢

1 个答案:

答案 0 :(得分:1)

另一个选择是:

indx <- Map(intersect, dimnames(t(m2)), dimnames(m1))
m1[indx[[1]], indx[[2]]] <- m2[indx[[2]], indx[[1]]]
m1
#    a b   c d   e
#x 0.0 0 0.0 0 0.0
#y 1.2 0 1.5 0 1.4
#x 0.0 0 0.0 0 0.0

更新

根据dput的{​​{1}}输出(在评论中),m2的colname是m2,因为{{1}的rownames之间没有相交1}}和m2的colname,当您使用代码时,它不会替换任何内容。

m1

数据

m2