Вы создаете столбец индекса в исходном фрейме data.frame. Если вы хотите разделить df на два набора, train
и test
, вы можете сделать следующее.
library(caTools)
set.seed(6) # make the results reproducible
inx <- sample.split(seq_len(nrow(customerduration_data)), 0.7)
train <- customerduration_data[inx, ]
test <- customerduration_data[!inx, ]
Это не создает столбец spl
. Чтобы создать его, используйте ответ @ RalfStubner.
РЕДАКТИРОВАТЬ.
Другой способ - использовать sample
с вектором вероятностей.
inx2 <- sample(c(FALSE, TRUE), 4495, replace = TRUE, prob = c(0.3, 0.7))
Пока тестирую три решения, я получаю следующие результаты.
microbenchmark::microbenchmark(
base_griffinevo = sample(c(rep(TRUE, floor(0.7*4495)), rep(FALSE, 4495-floor(0.7*4495))), replace = F),
base_Rui = sample(c(FALSE, TRUE), 4495, replace = TRUE, prob = c(0.3, 0.7)),
caTools_Ralf = sample.split(seq_len(nrow(customerduration_data)), 0.7)
)
#Unit: microseconds
# expr min lq mean median uq max neval
# base_griffinevo 177.072 183.7665 219.3547 195.147 239.6660 523.851 100
# base_Rui 89.708 93.2225 119.4083 119.666 134.5615 253.389 100
# caTools_Ralf 838.495 861.4235 1103.0870 926.361 1313.1390 3634.478 100
Таким образом, более простой, базовый путь R также самый быстрый.