在R中:来自"总计"的样本列,然后从采样列,存储值和重新采样中减去1

时间:2015-05-18 22:12:43

标签: r

我绝对不是R编码员,但我试图通过这段代码绊倒我。我有一个看起来像这样的数据框 - 有200行(这里只显示了8行)。

 Ind.ID V1  V2  V3  V4  V5  V6  V7  Captures
1   1   0   0   1   1   0   0   0   2
2   2   0   0   1   0   0   0   1   2
3   3   1   1   0   1   1   0   1   5
4   4   0   0   1   1   0   0   0   2
5   5   1   0   0   0   0   1   0   2
6   6   0   1   1   0   0   0   0   2
7   7   0   0   1   1   1   0   0   3
8   8   1   0   0   0   1   0   0   2

我试图从Captures列(它是行的总和)中进行采样并输出Ind.ID值。如果Captures列中有0,我希望它从i(i=i-1)中减去1并重新采样 - 以确保我得到正确的样本数。我还想从采样列中减去1(即,如果采样,将Captures值减1),然后重新采样。我想获得400个样本(我认为当前的代码只能让我200,但我无法弄清楚如何获得400)。

我希望我的输出是

23
45
197
64
.....

这是我的代码:

sess1<-(numeric(200)) #create a place for output

  for(i in 1:length(dep.pop$Captures)){ 
    if(dep.pop[i,'Captures']!=0){  #if the value of Captures is not 0, sample and 
        sample(dep.pop$Captures, size=1, replace=TRUE) #want to resample the row if Captures >1
    #code here to decrease the value of the sampled Captures column by 1. create new vector for resampling?
    } 
    else {
     if(dep.pop[i,'Captures']==0){  #if the value of Captures = 0
        i<-i-1 #decrease the value of i by 1 to ensure 200 samples
        sample(dep.pop$Captures, size=1, replace=TRUE) #and resample
      }
     #sess1<- #store the value from a different column (ID column) that represents the sampled row
    }}

谢谢!

1 个答案:

答案 0 :(得分:0)

假设sum(dep.pop$Captures)至少为400,那么以下代码可能会满足您对每个ID的捕获次数的需求:

sample(rep(dep.pop$Ind.ID, times=dep.pop$Captures), size=400)

如果您希望对替换进行采样(因此您不必担心捕获的总数)但仍希望将每个ID的捕获数量用作采样权重,那么可能

sample(dep.pop$Ind.ID, size=400, replace=TRUE, prob=dep.pop$Captures)