如何在R中重新采样矢量值?

时间:2014-10-24 21:16:45

标签: r

我有两个向量:

x <- c(1, 2, 3, 4)
y <- c(5, 6, 7, 8, 9, 10)

现在我想重新采样n次,以便两个矢量的数量可以随机混合并保持其尺寸。 例如

在n = 1

x <- c(2, 4, 7, 1)
y <- c(3, 9, 8, 6, 5, 10)

在n = 2

x <- c(5, 6, 10, 3)
y <- c(1, 9, 8, 4, 2, 7)

我怎样才能在R中实现这个目标?

1 个答案:

答案 0 :(得分:2)

您可以定义自己的辅助函数,如

resample <- function(x,y) {
    xx <- sample(c(x,y))
    list(x=xx[1:length(x)], y=xx[-(1:length(x))])
}

然后将其与

一起使用
# set.seed(15)
r1 <- resample(x,y)
r1$x
# [1] 7 2 8 5
r1$y
# [1]  3 10  4  1  9  6
r2 <- resample(x,y)
r2$x
# [1] 2 6 5 8
r2$y
# [1]  9  7 10  3  1  4

但看起来你可能正在置换案例/控件标签或其他东西?在这种情况下,您可能有一个组分配向量

group <- rep(c("x","y"), c(length(x),length(y)))

然后你可以只是每次混合组

的样本()
# set.seed(15)
(g1<-sample(group))
# [1] "y" "x" "y" "y" "x" "y" "x" "x" "y" "y"
(g2<-sample(group))
# [1] "x" "y" "y" "y" "y" "y" "y" "x" "x" "x"

你可以用

提取索引
which(g1=="x")
# [1] 2 5 7 8
which(g1=="y")
# [1]  1  3  4  6  9 10

如果你真的需要。