【问题标题】:Random sampling of two vectors, finding mean of sample, then making a matrix in R?两个向量的随机抽样,找到样本的平均值,然后在 R 中制作一个矩阵?
【发布时间】:2012-06-05 02:09:34
【问题描述】:

感谢您的宝贵时间!

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

最后,我想对 8 种基因型进行 10,000 次采样,并且对于每个样本,我想获得相关特征值的标准差和平均值。理想情况下,这将在一个矩阵中,其中每一行代表一个样本,每个基因型有 8 列,最后 2 列用于 stdev 和与这些基因型相关的性状值的平均值。这也可以换个方向。

  1. 如何从数据框中的两个不同列中进行抽样,以便两个值都显示在新样本中?即计算平均值和标准差的基因型和性状值

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

  3. 如何将这个过程重复 10,000 次?

再次感谢!

【问题讨论】:

    标签: r matrix sampling


    【解决方案1】:

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

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

    replicate 函数旨在重复随机过程。重复 3 次,从这样的 2 个基因型样本中获取“特征”的 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
    

    这会记录样本 id 的均值和 sd 值:

    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
    

    【讨论】:

      猜你喜欢
      • 2022-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多