在R中创建训练和测试数据集

时间:2014-05-11 18:44:37

标签: r subset training-data

我想从mydata创建训练和测试数据,其中有2673个观测值和23个变量。但是,我无法仅通过简单地减去训练数据来创建测试集。

dim(mydata)
## [1] 2673   23
set.seed(1)
train = mydata[sample(1:nrow(mydata), 1000, replace=FALSE), ]
dim(train)
## [1] 1000   23

当我执行以下操作时,我收到了19个警告,结果有20,062个观察结果:

test = mydata[!train, ]
## There were 19 warnings (use warnings() to see them)
dim(test)
## [1] 20062    23

我做错了什么?

1 个答案:

答案 0 :(得分:4)

可能的解决方案是将采样的索引存储在单独的命名向量中。

train_idx <- sample(1:nrow(mydata),1000,replace=FALSE)
train <- mydata[train_idx,] # select all these rows
test <- mydata[-train_idx,] # select all but these rows

此外,知道data.frame row.names属性必须包含唯一值, 你也可以设置例如。

test <- mydata[!(row.names(mydata) %in% row.names(train)), ]

但第二个解决方案在mydata <- data.frame(a=1:100000, b=rep(letters, len=100000))上慢了2倍,由microbenchmark()衡量。