首页 > 解决方案 > 有条件的两个数据表的随机抽样

问题描述

我试图在一个条件下对两个数据表进行采样,然后组合两个结果样本的列并复制这些步骤并将结果样本附加到一个新的数据表中。两个表的摘录(它们没有样本长度):

data1
   month1 year
1: 1    2014
2: 2    2015
3: 3    2016
..

data2
   month2    
1: 4   
2: 5    
3: 6   
..

第一个样本: s1 = sample(data1[month = i ], 100, replace=TRUE)i1 到 n

第二个样本: s2 = sample(data2[month > i ], 100, replace=TRUE)wherei应该大于为 s1 选择的月份。

这两个样本应该组合在一个新的数据表中,例如dt1 = cbind(s1,s2)

我想每个月重复这些步骤,并使用所有结果样本(伪代码)创建一个新数据集:

 for(i in 1:10){
s1_i  = sample(data1[month = i ], 100, replace=TRUE)
s2_i = sample(data2[month > i ], 100, replace=TRUE)
new_i = cbind(s1_i,s2_i)
 }
allsamples = rbind(new_1,new_2,new_3,...)

我在编写这个循环时遇到了麻烦,它不应该为每个步骤创建数据集,而应该只创建 allsamples 数据集,所有样本都在其中组合。

标签: rdatatablesample

解决方案


这个怎么样?

allsamples <- NULL
for(i in 1:length(month)){
  s1 <- sample(data1[month == i], 100, replace = TRUE)
  s2 <- sample(data1[month > i], 100, replace = TRUE)
  allsamples <- rbind(allsamples, cbind(s1, s2))
}

设置后,您正在采样替换,这是您打算做的吗?

可能有更好的方法来做到这一点,因为增长的对象通常很慢,但是看到只有 12 个月的循环时间,我想它应该不会对你的性能造成太大影响。


推荐阅读