0

我有两个不同长度的向量 X 和 Y。认为

X = c('a','b','c','d','e')
Y = c('x','y','z')

我有一个参数 alpha 将设置在值 0 和 1 之间。我想以概率方式合并这两个向量。这是一个从向量 X alpha 百分比的时间和剩余时间从 Y 提取的函数。例如,如果 alpha 设置为 0.9,则合成向量 R 可以是

R = a,x,b,c,d,y,e,z

请注意,向量的前部有更多来自 X 的元素,因为 alpha 很高。有没有一种快速的方法可以在 R 中做到这一点?我正在使用 Perl 中的数组和队列来执行此操作,我发现这很麻烦。另外,我不需要关心下一次运行的顺序是否不同,因为它本质上是概率性的。

我需要保留每个向量 X 和 Y 中的顺序。注意 a,b,c,d... 和 x,y,z 是按顺序排列的。

4

2 回答 2

3

你可以用它sample来做到这一点

X = c('a','b','c','d','e')
Y = c('x','y','z')

set.seed(123)
R <- sample(c(X, Y), prob = c(rep(0.9, length(X)), rep(0.1, length(Y))))
R
[1] "d" "c" "b" "y" "x" "a" "e" "z"

要获得相同的顺序:

set.seed(123)
Z <- c(X,Y)
R <- sample(seq_along(Z), prob=c(rep(0.9, length(X)), rep(0.1, length(Y))))
out <- integer(length(Z))
out[R <= length(X)] <- X
out[R > length(X)] <- Y

即使一个之间有一些共同的元素(虽然不确定它是否对你的情况有意义),这也会处理X好事情Y

于 2013-06-24T19:00:41.100 回答
1

在输出中保留向量的顺序并建立@dickoa 的尝试:

x <- c('a','b','c','d','e')
y <- c('x','y','z')

prop_x <- 0.9
prop_y <- 1 - prop_x

r <- sample(c(x, y), prob = c(rep(prop_x, length(x)), rep(prop_y, length(y))))

# find indices that are x and substitute x in (guaranteed to be in order)
r[r %in% x] <- x
r[r %in% y] <- y

[1] "a" "x" "y" "b" "c" "d" "e" "z"
于 2013-06-24T19:30:07.790 回答