0

我有两个向量 x 和 y。与 y 相比,x 是一个更大的向量。例如(此处 x 设置为全零,但不一定是这种情况)

x = rep(0,20)
y = c(2,3,-1,-1)

我想要完成的是在 x 中随机覆盖一些 y。所以在上面的例子中,x 看起来像

0,0,2,3,-1,-1,0,0,0,0,2,3,-1,-1,... 

基本上,我将遍历 x 中的每个值,提取一个随机数,如果该随机数小于某个阈值,我想在 x 中的接下来 4 个位置覆盖 y,除非我已经到达 x 的末尾。任何应用功能都有帮助吗?提前非常感谢。

4

3 回答 3

1

x一种简单的方法是从组合的两个向量中随机选择点(与 相同的长度):

sample(c(x, y), length(x), replace = TRUE)

如果您想在其中引入一些概率,您可以执行以下操作:

p <- c(rep(2, each = length(x)), rep(1, each = length(y)))
sample(c(x, y), length(x), prob = p, replace = TRUE)

这就是说一个x点被选择的可能性是一个点的两倍(针对不同的概率相应地y更改 2 和 1 )。p

于 2012-07-13T15:35:53.920 回答
0

像下面这样的东西对我有用。

i = 1
while(i <= length(x)){
 p.rand = runif(1,0,1)
 if(p.rand < prob[i]){
  p[i:(i+length(y))] = y
  i = i+length(y)
 }
 i = i + 1
}

其中 prob[i] 是某个概率向量。

于 2012-07-13T18:30:08.970 回答
0

简短的回答:是的:-)。写一些函数,比如

ranx <- runif(length(x)-length(y)+1)
# some loop or apply func...
if (ranx[j] < threshold) x[j:j+length(y)] <- y
# and make sure to stop the loop at length(y)-length(x)
于 2012-07-13T15:39:21.480 回答