首页 文章

从人口减少中抽取样本

提问于
浏览
1

我想从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)] #...

显然,这在几个时期内是不可持续的 . 有什么更好的方法呢?我想这是一种标准方法,但无法想象具体要找什么 . 感谢任何和所有的输入 .

1 回答

  • 1

    这显示了如何“增长”以每个间隔时间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
    

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

相关问题