我想从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
我做错了什么?
答案 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()
衡量。