对两个向量进行随机抽样,找出样本的均值,然后在R中制作矩阵?

时间:2012-06-05 02:09:34

标签: r matrix sampling

谢谢你的时间!

我的数据框很简单。两列:第一列具有基因型(1-39),第二列具有特征值(数字,连续)。我想选择8种基因型并计算相关性状值的平均值和stdev。

最后,我想对8个基因型进行10,000次抽样,对于每个样本,我希望得到相关特征值的stdev和均值。理想情况下,这将是一个矩阵,其中每行代表一个样本,每个基因型有8列,stdev有2个最终列,与这些基因型相关的特征值的平均值。这也可能是另一种方式。

  1. 如何从数据框中的两个不同列进行采样,以便在新样本中显示这两个值?即基因型和特征值与平均值和stdev计算

  2. 如上所述,如何将此样本放入矩阵中?

  3. 您如何重复此过程10,000次?

  4. 再次感谢!

1 个答案:

答案 0 :(得分:5)

这将返回8个特征的随机样本中具有基因型的所有行的单个样本:

dat[ dat$genotype %in% sample(1:39, 8), ]

replicate功能旨在重复随机过程。从这样的2种基因型样本中重复3次获得“性状”的sd:

dat <- data.frame(genotype=sample(1:5, 25,replace=TRUE), trait=rnorm(25) )
replicate ( 3, sd(dat[ dat$genotype %in% sample(1:5, 2), "trait" ]) )
[1] 0.7231686 0.9225318 0.9225318

这会使用平均值和sd值记录样本ID:

replicate ( 3, {c( samps =sample(1:5, 2), 
                   sds=sd(dat[ dat$genotype %in% samps, "trait" ]) ,
                   means = mean(dat[ dat$genotype %in% samps, "trait" ]) )} )
            [,1]      [,2]      [,3]
samps1 1.0000000 1.0000000 5.0000000
samps2 5.0000000 3.0000000 1.0000000
sds    0.8673977 0.8673977 0.8673977
means  0.2835325 0.2835325 0.2835325