1

鉴于以下设置:

> 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 循环这将很简单,但是没有它们可以完成吗?

4

1 回答 1

1

cbind我们可以通过设置索引来使用行/列索引row(使用row, c-> 将数字索引矩阵转换为向量),通过转置“位置”来使用列索引,将其强制为向量(c),删除 NA 元素(na.omit),根据索引提取'vals'中的元素并将( <-)分配给'temp'

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

数据

position <- structure(c(1, 2, 1, 4, 3, 2, NA, NA, 3, NA, NA, 4), .Dim = 3:4)
于 2019-05-17T16:09:23.183 回答