我绝对不是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
}}
谢谢!
答案 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)