我对R非常熟悉,但是从来没有这个要求,我需要使用R中的createDataPartition随机创建完全相等的数据分区。
index = createDataPartition(final_ts$SAR,p=0.5, list = F)
final_test_data = final_ts[index,]
final_validation_data = final_ts[-index,]
此代码创建两个分别具有1396和1398观测值的数据集。
令我惊讶的是,为什么p = 0.5并未执行应做的事情。它与默认情况下没有奇数个观测值的结果数据集有关吗? 预先感谢!
答案 0 :(得分:2)
这与响应变量的大小(在您的情况下为final_ts$SAR
)有关。
例如:
y <- rep(c(0,1), 10)
table(y)
y
0 1
10 10
# even number of cases
现在我们分开:
train <- y[caret::createDataPartition(y, p=0.5,list=F)]
table(train) # we have 10 obs
train
0 1
5 5
test <- y[-caret::createDataPartition(y, p=0.5,list=F)]
table(test) # we have 10 obs.
test
0 1
5 5
如果我们用奇数个案例进行构建和示例:
y <- rep(c(0,1), 11)
table(y)
y
0 1
11 11
我们有:
train <- y[caret::createDataPartition(y, p=0.5,list=F)]
table(train) # we have 12 obs.
train
0 1
6 6
test <- y[-caret::createDataPartition(y, p=0.5,list=F)]
table(test) # we have 10 obs.
test
0 1
5 5
更多信息here。
答案 1 :(得分:0)
这里是另一个线程,它解释了为什么从createDataPartition返回的数字对我们来说似乎是“关闭”的,而不是根据此函数试图执行的操作而定。 因此,这取决于您在final_ts $ SAR中拥有什么以及数据的传播范围。 如果是分类值,例如:T和F,如果总计为100,则55为T,45为F。在代码中调用方式时,它将返回51,因为: 55 * 0.5 = 27.5,45 * 0.5 = 22.5,将每个结果四舍五入,28 + 23 = 51。
当您要拆分的值是数字时,您可以参考下面的线程,对此有很好的解释。
R - caret createDataPartition returns more samples than expected