首页 文章

用另一个向量中的不同样本替换向量中的特定值

提问于
浏览
8

我有一个带有整数值的向量“a”,由于正在运行的代码的其他部分,其中一些可能已经变为0 . 我想用来自另一个矢量“b”的随机样本替换此向量中出现的0 . 但是,如果“a”中有多个0值,我希望它们来自“b”的所有不同样本 . 例如:

a <- c(1, 2, 3, 0, 0, 0)
b <- 1:100

我想将“a”的最后三个0值替换为“b”中的随机值,但我想避免使用1,2或3.这些已经在a中 .

目前,我正在使用while循环,所以:

while(0 %in% a) {
  s = sample(1, b)
    while(s %in% a) {
      s = sample(1, b)
    }
  a[a==0][1] = s
}

有一个更好的方法吗?看起来像这个双循环可能需要很长时间才能运行 .

1 回答

  • 8

    您可以执行以下操作

    indx <- which(!a) # identify the zeroes locations
    # Or less golfed `indx <- which(a == 0)`
    a[indx] <- sample(setdiff(b, a), length(indx)) # replace by a sample from `setdiff(b, a)`
    

    我们没有指定 replace = TRUE 所以新值将始终彼此不同 .

相关问题