PMa*_*PMa 1 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
Run Code Online (Sandbox Code Playgroud)
当我运行以下命令时,我收到 19 个警告,结果有 20,062 个观察值:
test = mydata[!train, ]
## There were 19 warnings (use warnings() to see them)
dim(test)
## [1] 20062 23
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
一种可能的解决方案是将采样的索引存储在单独的命名向量中。
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
Run Code Online (Sandbox Code Playgroud)
另外,知道 adata.frame的row.names属性必须由唯一值组成,您还可以设置例如
test <- mydata[!(row.names(mydata) %in% row.names(train)), ]
Run Code Online (Sandbox Code Playgroud)
mydata <- data.frame(a=1:100000, b=rep(letters, len=100000))但根据 测量,第二个解决方案在 上速度慢 2 倍microbenchmark()。