我有一个矢量" 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
}
有更好的方法吗?看起来这个双重循环可能需要很长时间才能运行。
答案 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
,因此新值将始终彼此不同。