2014-05-11 102 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

相關問題