繁体   English   中英

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

[英]R, rbinom(), NA, and matrices: How to ignore NA yet retain them

我通过二项式概率表达式将一些值放在矩阵中。 问题是我需要在矩阵中保留一些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] 10111511298103103

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

任何想法如何有效地做到这一点?

请注意,顺序不同,但是矩阵结构中的位置是所需的,并且由于这是一个随机过程,不应由位置确定,因此我不明白为什么此结果不如您的排序有效(已填充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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM