R 从不断减少的人口中抽取样本

R 从不断减少的人口中抽取样本,r,data.table,R,Data.table,我想从data.frame中随机抽取行样本,将函数应用于子集,然后从其余行中抽取样本,将函数应用于新子集(使用不同的参数),等等 一个简单的例子是,如果每个月有5%的人口死亡,在第2个月我需要人口减去在第1个月死亡的人口 我已经提出了一个非常详细的方法来实现这一点,其中包括从采样行保存ID,然后从第二个周期的数据中将其子集,等等 library(data.table) dt <- data.table(Number=1:100, ID=paste0("A", 1:100)) first

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

一个简单的例子是,如果每个月有5%的人口死亡,在第2个月我需要人口减去在第1个月死亡的人口

我已经提出了一个非常详细的方法来实现这一点,其中包括从采样行保存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)] #...
库(data.table)
dt这显示了如何“增长”以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 

删除该选项可以,但如何生成上述组?也就是说,初始总体的一个随机子集,然后是总体减去子集1的另一个随机子集,等等。想想你的实际问题是什么。你真的想模拟(a)人口死亡的5%或(b)人口中每个成员死亡的5%几率吗?或者,你想把每个成员看作一个分数生命,并继承每个人仍然活着的概率吗?嗯,这不是我所看到的,只是一个简单的方法来构建它。不管怎样,我不需要每次都从我的人群中删除“死亡”观察结果吗?你能给我指一些相关的吗?