进行以下设置:
> 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循环会很简单,但是没有它们就可以完成吗?
答案 0 :(得分:2)
我们可以通过cbind
索引row
(使用row
,c
->将数字索引矩阵转换为向量)来使用行/列索引,通过转置“位置”来使用列索引,将其强制为向量(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