2015-12-20 3 views
1

Я ищу прочный способ разделения набора данных без использования функции sample() и надеемся получить некоторую обратную связь.Data Partition in R

В самом деле, я бы в идеале хотел бы избавиться от от random собственности, присущие использованию sample()

samp<-data.frame(qldat) # convert zoo time-series object to data.frame 
ind <- sample(2,nrow(samp),replace = TRUE, prob=c(0.8,0.2)) # splitting 
#data series between training and test sets 
tsamp<- samp[ind==1,] # training dataset 
vsamp<- samp[ind==2,] # test set 

После некоторых исследований, я понял, что subset() мог бы помочь , но это может быть связано с набором данных hard-coding. По жесткого кодирования я имею в виду для 80:20 раскола (%) с помощью nrow(samp), это возможно подмножество данных из row=1 в row= 0.8 * nrow(samp), например, признание того, что это может быть не очень эффективным решением.

Я также попытался createDataPartition(), но это не соответствует моим ожиданиям, так как samp не имеет какие-либо categorical data, на котором я мог бы опереться для раскола (например createDataPartition(y=samp$categoricaldata,p=0.8, list=FALSE)

PS: Что мне нравится в ind<- - это включение prob=c(0.8,0.2), поэтому срез сортируется автоматически. Следовательно, любая аналогичная идея без случайного расщепления tsamp & & vsamp будет очень признательна.

Лучшие,

+2

Если вы не производите, как вы хотите определить, какая часть данных проходит обучение и тестирование? Вы всегда хотите сделать это в последовательности, в которой строки отображаются в данных? Что произойдет, если «четкий» раскол не может быть выполнен (например, проблемы 0,2 и 0,8 и 101 наблюдение). – Heroka

+0

@Heroka: с помощью 'nrow()'. Если конкретный столбец проиндексирован, скажем, '[1:10]', тогда рассмотрим первый раскол из '[round (1 * 80%): 8]' для 'tsamp'. Надеюсь, поможет. – owner

ответ

0

Это вы что искали?

n <- nrow(samp) 
train_i <- 1:round(0.8*n) 
test_i <- round(0.8*n+1):n 
train <- samp[train_i,] 
test <- samp[test_i,] 
+0

Спасибо, как вы определенно поняли. Ваше предложение действительно работает, и я буду принимать его как ответ, хотя, как указано в потоке, я бы не хотел каким-либо образом кодировать набор данных, используя '(0.8 * n)' например. Возможно, нет другой альтернативы ... – owner

+0

Вы хотите, чтобы пропорции разделения были случайными или что именно вы ищете? – mtoto

+0

До сих пор я доволен статическими весами, но думал, что может быть другой способ реплицировать его в одном выражении, например, в 'ind <-'. – owner

 Смежные вопросы

  • Нет связанных вопросов^_^