从减少人口中抽取样本

我想从data.frame中随机取样行,将函数应用于子集,然后从其余行中取样,将函数应用于新子集(使用不同参数)等等。

一个简单的例子是,如果每个月有5%的人死亡,第二个月我需要的人数减去那些在第一个月死亡的人。

我已经制定了一个非常详细的方法,涉及从抽样行中保存ID,然后将它们从第二阶段的数据中分类出来等等。

library(data.table)
dt <- data.table(Number=1:100, ID=paste0("A", 1:100))


first<-dt[sample(nrow(dt), nrow(dt)*.05)]$ID
mean(dt[ID %in% first]$Number)


second<-dt[!(ID %in% first)][sample(nrow(dt[!(ID %in% first)]),
                                 nrow(dt[!(ID %in% first)])*.05)]$ID
mean(dt[ID %in% c(first,second)]$Number)

dt[!(ID %in% first)][!(ID %in% second)] #...

显然,这在过去几个时期是不可持续的。 有什么更好的方法来做到这一点? 我想这是一个标准方法,但不能认为要特别寻找什么。 感谢任何和所有的输入。


这显示了如何“增长”以每间隔5%的时间间隔采样的项目矢量:

 removed <- numeric(0)
 for ( i in 1:10){ 
    removed <- c(removed, sample( (1:100)[!(1:100) %in% removed], # items out so far
                                  (100-length(removed))*.05))  # 5% of remainder
     cat(c(removed, "n"))  # print to console with each iteration.
     }
54 1 76 96 93 
54 1 76 96 93 81 16 13 79 
54 1 76 96 93 81 16 13 79 80 74 30 29 
54 1 76 96 93 81 16 13 79 80 74 30 29 52 33 86 19 
54 1 76 96 93 81 16 13 79 80 74 30 29 52 33 86 19 34 32 41 62 
54 1 76 96 93 81 16 13 79 80 74 30 29 52 33 86 19 34 32 41 62 5 70 8 
54 1 76 96 93 81 16 13 79 80 74 30 29 52 33 86 19 34 32 41 62 5 70 8 66 82 50 
54 1 76 96 93 81 16 13 79 80 74 30 29 52 33 86 19 34 32 41 62 5 70 8 66 82 50 6 91 99 
54 1 76 96 93 81 16 13 79 80 74 30 29 52 33 86 19 34 32 41 62 5 70 8 66 82 50 6 91 99 46 27 51 
54 1 76 96 93 81 16 13 79 80 74 30 29 52 33 86 19 34 32 41 62 5 70 8 66 82 50 6 91 99 46 27 51 22 23 20 

请注意,添加到“删除”列表中的项目的实际数量将会减少。

链接地址: http://www.djcxy.com/p/73901.html

上一篇: Take sample from diminishing population

下一篇: standard evaluation arguments to the subset function