在给定位置矩阵和值向量的情况下修改空矩阵

时间:2019-05-17 15:55:46

标签: r matrix

进行以下设置:

> vals = matrix(nrow = 3,ncol = 4)
     [,1] [,2] [,3] [,4]
[1,]   NA   NA   NA   NA
[2,]   NA   NA   NA   NA
[3,]   NA   NA   NA   NA

> position =  matrix(c(4,2,1, 6,3,2, NA,NA,3, NA,NA,4), nrow = 3, ncol = 4)
     [,1] [,2] [,3] [,4]
[1,]    1    4   NA   NA
[2,]    2    3   NA   NA
[3,]    1    2    3    4

> temp = c(10, 5, 8, 6, 9, 2, 4, 3)

我试图用vals中保存的值填充temp。但是,必须将值放在position给定的位置。具体来说,position中的每一行代表vals中的一行,并且值表示必须在其中放置值的列。

例如,position[2,2] = 3。由于该位置是第二行,因此相应的值必须输入vals[2,3]中。最终结果将是:

     [,1] [,2] [,3] [,4]
[1,]   10   NA   NA    5
[2,]   NA    8    6   NA
[3,]    9    2    4    3

使用for循环会很简单,但是没有它们就可以完成吗?

1 个答案:

答案 0 :(得分:2)

我们可以通过cbind索引row(使用rowc->将数字索引矩阵转换为向量)来使用行/列索引,通过转置“位置”来使用列索引,将其强制为向量(c),删除NA元素(na.omit),根据索引提取“ vals”中的元素并赋值({ {1}})更改为“临时”

<-

数据

vals[na.omit(cbind(c(t(row(position))), c(t(position))))] <- temp
vals
#     [,1] [,2] [,3] [,4]
#[1,]   10   NA   NA    5
#[2,]   NA    8    6   NA
#[3,]    9    2    4    3