[英]R, rbinom(), NA, and matrices: How to ignore NA yet retain them
我通过二项式概率表达式将一些值放在矩阵中。 问题是我需要在矩阵中保留一些NA值,但是输入NA时rbinom()返回错误。
我的算法包括以下内容:
这是一个可重现的示例。
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.