R,rbinom(),NA和矩阵:如何忽略NA但保留它们

时间:2012-11-07 06:02:23

标签: r matrix

我通过二项式概率表达式将一些值放在矩阵中。问题是我需要在矩阵中保留一些NA值,但是当输入NA时rbinom()会返回错误。

我的算法包括以下内容:

  • (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

知道如何有效地做到这一点吗?

1 个答案:

答案 0 :(得分:0)

请注意,顺序不一样,但矩阵结构中的位置是所希望的,因为这是一个不应该由位置确定的随机过程我不明白为什么这个结果不如您的排序有效(R矩阵由列填充而不是按行填充:

 xn_bin <- z

 set.seed(6)
 xn_bin[ !is.na(z) ] <- rbinom(n=rep(1,length(dup[-which(is.na(dup))])), 
                               size = as.vector(dup[-which(is.na(dup))]),prob = 0.5)
 xn_bin
     [,1] [,2]
[1,]  NaN   98
[2,]  101  103
[3,]  115  NaN
[4,]  NaN  103
[5,]  112  NaN