【发布时间】:2017-09-05 11:38:24
【问题描述】:
我有一个数据框,我想按组 ID 将其拆分为一个训练集和测试集。以下代码对随机行进行采样并将它们放入训练和测试 df:
samp <- sample(nrow(df), 0.7 * nrow(df))
train <- df[samp, ]
test <- df[-samp, ]
但是,我想将我的 ID 组合在一起。
示例输入 df:
my_dat <- data.frame(ID=as.factor(rep(1:3, each = 3)), Var=sample(1:100, 9))
ID Var
1 17
1 26
1 100
2 9
2 41
2 49
3 36
3 18
3 5
以及想要的输出到:
火车:
ID Var
1 17
1 26
1 100
3 36
3 18
3 5
测试:
ID Var
2 9
2 41
2 49
【问题讨论】:
-
然后对 id 进行采样。类似
myIds <- unique(df$id); myTrainers <- sample(myIds, 2)。然后myTesters <- myIds[!(myIds %in% myTrainers)]. -
谢谢。然而,似乎有什么不对劲。
myTrainers和myTesters的输出分别为:[1] 2 3 Levels: 1 2 3和[1] 1 Levels: 1 2 3。 -
你的变量是一个因子变量。这就是“级别:1 2 3”所指示的内容。如果您注意到第一部分,您可以看到任务已完成,myTrainers 获得 id 2 和 3,myTesters 获得 id 1。要将 id 转换为整数,您可以使用
as.integer,但您可能想要查看更接近该变量以及为什么将其作为因子变量读入。