2014-05-11 100 views
0

我想从mydata创建训练和测试数据,其中有2673个观察值和23个变量。但是,我不能仅仅通过减去训练数据来创建测试集。在R中创建训练和测试数据集

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

当我运行下面,我得了19个警告和结果有20062点意见:

​​

我在做什么错?

+0

相关这里http://stackoverflow.com/q/5963269/54964 –

回答

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.framerow.names属性必须包含唯一值, 你也可以设置如

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

但第二溶液是较慢的2倍上mydata <- data.frame(a=1:100000, b=rep(letters, len=100000)),如通过microbenchmark()测量。

+0

谢谢!在创建'train_idx'之前,我仍然需要设置种子? – PMa

+0

如果您希望获得可重复的结果,请在'sample()'之前调用'set.seed(some_number)'。如果这对你并不重要,请按原样保留种子(根据系统时间+其他信息自动设置)。 – gagolews

相关问题