首页 > 解决方案 > R随机数据拆分基于2列

问题描述

我有这样的数据(列 ObjectID 和 Cost),我通常使用以下方法拆分数据:

sample.split(data$Cost, SplitRatio=0.7)

但在这种情况下,我希望将“成本”保持为相对比率,但我也想使用 ObjectID - 所以每个 ObjectID 只能在测试或训练组中。如何随机拆分这个?

ObjectID Cost   Type
12345   1624    Test
12345   1175    Test
12345   1049    Test
12345   1733    Test
11111   1945    Train
11111   1989    Train
22222   1448    Test
22222   1815    Test
22222   1244    Test
33333   1355    Train
33333   1134    Train
44444   1478    Train
44444   1082    Train
44444   1147    Train
44444   1290    Train
55555   1383    Train
55555   1378    Train
55555   1288    Train

标签: rrandomsplit

解决方案


sample超过唯一ObjectID而不是所有行。

uniq_sample <- unique(df$ObjectID)
train_sample <- sample(uniq_sample, length(uniq_sample) * 0.7)
test_sample <- setdiff(uniq_sample, train_sample)
train <- subset(df, ObjectID %in% train_sample)
test <- subset(df, ObjectID %in% test_sample)

推荐阅读