在R中随机合并两个向量

时间:2012-07-13 15:00:47

标签: r

我有两个向量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叠加到x中的下4个位置,除非我已经到达终点x。任何应用功能都有帮助吗?非常感谢。

3 个答案:

答案 0 :(得分: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点上选择的可能性是p点的两倍(因此,对于不同的概率,相应地更改{{1}}中的2和1)。

答案 1 :(得分: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)

答案 2 :(得分: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]是一些概率向量。