【问题标题】:R, rbinom(), NA, and matrices: How to ignore NA yet retain themR、rbinom()、NA 和矩阵:如何忽略 NA 并保留它们
【发布时间】:2012-11-07 06:02:23
【问题描述】:

我通过二项式概率表达式将一些值放入矩阵中。问题是我有一些 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

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

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    请注意,顺序不一样,但矩阵结构中的位置是所需的,因为这是一个不应该由位置确定的随机过程,我不明白为什么这个结果不像你的排序那样有效(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
    

    【讨论】:

    • 可以按行排列吗?每列代表人口的增长,而每一行是不同人口的复制品。因此,如果按列排序,则不同人群之间的值会混淆。
    • 另外,z 的定义是什么?在我的示例中,它没有被定义为产生错误。
    • 第一个问题:处理和R矩阵的顺序是沿列的,所以我相信我的顺序是正确的,而你的顺序是错误的。第二个问题:你定义了z。 ???我只是复制了它,以便在正确的位置放置值的占位符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    相关资源
    最近更新 更多