在R中引导两个数据集

时间:2013-09-20 07:28:14

标签: r

我有两个数据帧如下:

 seed(1) 
 X <- data.frame(matrix(rnorm(2000), nrow=10))

其中行代表基因,列是基因型。

对于每轮引导(n=1000),应该随机选择基因型而不替换此数据集(X)并形成两组数据集(X'应该有5种基因型并且Y'应该有5种基因型)。基本上,最后我将有数千个这样的数据集X'Y',它们将包含5个随机基因型,每个基因型来自完整的表达数据集。

我尝试使用replicateapply,但没有效果。

B <- 1000
replicate(B, apply(X, 2, sample, replace = FALSE))

1 个答案:

答案 0 :(得分:1)

我认为你首先选择列号可能更有意义,从200而没有替换的是10(每个X'和Y'有5个):

colnums_boot <- replicate(1000,sample.int(200,10))

从那里开始,当你评估每次迭代时,我从1到1000,你可以抓住

Xprime <- X[,colnums_boot[1:5,i]]
Yprime <- X[,colnums_boot[6:10,i]]

这可以避免您制作三维array(R中matrix的概括)。

另外,如果速度是一个问题,我认为将X作为矩阵而不是数据帧会快得多。也许其他人可以对此发表评论。

编辑:这是一种在前面(在一对三维数组中)全部抓取它们的方法:

Z <- as.matrix(X)
Xprimes <- array(,dim=c(10,5,1000))
Xprimes[] <- Z[,colnums_boot[1:5,]]

Yprimes <- array(,dim=c(10,5,1000))
Yprimes[] <- Z[,colnums_boot[6:10,]]