我试图在一个条件下采样两个数据表,然后组合两个结果样本的列并复制这些步骤并将结果样本附加到新数据表中。两个表的提取(它们没有样本长度):
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)
,其中i
从1变为n
第二个样本:s2 = sample(data2[month > i ], 100, replace=TRUE)
,其中i
应该大于为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数据集,其中所有样本都合并在一起。
这个怎么样?
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个月的循环,我想它不应该太多伤害你的表现。
这是我的解决方案:
newsample =list()
begin_time = 1
end_time = 20
for(i in begin_time:end_time){
datasub1 <-data1[data1$var == i,] #filter data on condition
s1 <- datasub1[sample(nrow( datasub1), 10, replace=T), ] #sample
datasub2 <- data2[data2$var2 > i,]
s2 <- datasub2[sample(nrow(datasub2), 10, replace=T), ]
newsample[[i-(begin_time-1])] <- cbind(s1,s2) #combine and store in list
}
allsample = rbindlist(newsample) #stack samples as data table