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

时间:2016-01-19 17:10:41

标签: r vector

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

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

我想要&#34; a&#34;的最后三个0值要被&#34; b&#34;中的随机值替换,但我想避免使用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 个答案:

答案 0 :(得分: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,因此新值将始终彼此不同。