我有两个向量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。任何应用功能都有帮助吗?非常感谢。
答案 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]是一些概率向量。