我通过二项式概率表达式将一些值放入矩阵中。问题是我有一些 NA 值需要保留在我的矩阵中,但是 rbinom() 在输入 NA 时返回错误。
我的算法包括以下内容:
- (1) 从一列中的值矩阵开始。
- (2) 将该矩阵中的值加倍。
- (3) 从 0.5 的二项式概率中选择一个随机值。
- ......还有一些不必要的东西
这是一个可重现的例子。
set.seed(10)
xn <- matrix(c(NA, 100, 100, 100, 100, NA, NA, 100, 100, NA), byrow=TRUE, ncol=2)
dup <- xn * 2
z <- matrix(rbinom(n=rep(1,length(dup)), size = as.vector(dup), prob = 0.5), nrow = nrow(dup))
Warning message:
In rbinom(n = rep(1, length(dup)), size = as.vector(dup), prob = 0.5) :
NAs produced
我考虑只选择矩阵中具有实际值的值。
set.seed(6)
xn_bin <- rbinom(n=rep(1,length(dup[-which(is.na(dup))])), size = as.vector(dup[-which(is.na(dup))]),prob = 0.5)
我不知道如何将矩阵重新组合在一起,因为我需要从 xn_bin 获取结果并将它们放回新矩阵中的相同位置,因为 dup 值被输入到 rbinom()。
如果这没有任何意义。xn_bin 将给出值: xn_bin [1] 101 115 112 98 103 103
dup 将给出:
dup
[,1] [,2]
[1,] NA 200
[2,] 200 200
[3,] 200 NA
[4,] NA 200
[5,] 200 NA
我希望最终矩阵具有来自 xn_bin 的值和来自 xn 的 NA 值:
[,1] [,2]
[1,] NA 101
[2,] 115 112
[3,] 98 NA
[4,] NA 103
[5,] 103 NA
知道如何有效地做到这一点吗?