Я думаю, что вы должны заставить поезд и тестовый набор содержать все возможные значения из категориальных переменных.Я не уверен, как структурирован ваш набор данных, но предполагая, что lenkung
- это ваша земельная переменная.
Один из способов это сделать:
train_test = function(x,train_per=0.7){
smp_size = floor(train_per*nrow(x))
train_ind = sample(seq_len(nrow(x)),size = smp_size)
re = list()
re$train = x[train_ind,]
re$test = x[-train_ind,]
return(re)
}
splitted_data = split(data,data$lekung)
new_list = lapply(splitted_data,train_test)
Здесь мы определили функциюкоторый разбивает фрейм данных (x) на поезд и тестовый набор.Мы также используем функцию split()
, чтобы разделить ваши исходные данные на несколько фреймов данных, каждый из которых содержит только одно из возможных значений lekung.Допустим, значения могут быть «A», «B» или «C».В этом случае splitted_data
будет список с 3 кадрами данных, первый из которых содержит все наблюдения, где lekung = "A", второй - все наблюдения с lekung = "B" и т. Д. *
Затем,мы применяем к splitted_data
функцию, которую мы определили выше.Теперь new_list
содержит 2 фрейма данных для каждого возможного значения lekung, поезда и тестового.
Итак, наконец, нам просто нужно связать строки каждого фрейма данных поезда и сделать то же самое для тестовых фреймов данных..
train = new_list[[1]][[1]]
test = new_list[[1]][[2]]
for(i in 2:length(a)){ # Then we use this loop to bind the data together
train = rbind(train,new_list[[i]][[1]])
test = rbind(test,new_list[[i]][[2]])
}
new_list
представляет собой список списков из 2 кадров данных.Поэтому мы используем new_list[[1]]
для доступа к 2 фреймам данных, соответствующим первому значению lekung, и new_list[[1]][[1]]
для доступа к первому фрейму данных.
Хотя, вероятно, есть лучший способ сделать это.