0

我想从中创建训练和测试数据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

我究竟做错了什么?

4

1 回答 1

6

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

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

此外,知道 adata.framerow.names属性必须由唯一值组成,您还可以设置例如

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

但第二种解决方案的速度要慢 2 倍mydata <- data.frame(a=1:100000, b=rep(letters, len=100000)),由microbenchmark().

于 2014-05-11T18:46:08.823 回答