0

2 つのベクトル x と y があります。x は y に比べて大きなベクトルです。例 (ここでは x はすべてゼロに設定されていますが、そうである必要はありません)

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

私が達成したいのは、いくつかのyをxにオーバーレイすることですが、ランダムです。したがって、上記の例では、x は次のようになります。

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

基本的に、x の各値を調べて乱数を取得し、その乱数がしきい値よりも小さい場合は、x の末尾に到達していない限り、x の次の 4 桁に y をオーバーレイします。適用機能のいずれかが役立ちますか? よろしくお願いします。

4

3 に答える 3

1

これを行う簡単な方法は、x組み合わせた 2 つのベクトルからポイントをランダムに ( と同じ長さ) 選択することです。

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ポイントがポイントよりも 2 倍選ばれる可能性が高いことを示しています (確率が異なる場合は、それyに応じて 2 と 1 を変更してください)。p

于 2012-07-13T15:35:53.920 に答える
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 に答える
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 に答える