разделить фрейм данных, сохранить хотя бы один фактор в обоих подмножествах

У меня есть кадр данных из 200 тыс. строк, 10 столбцов. (включите только 3 здесь для удобства чтения)

df=data.frame(A=rep(letters[1:20],10000),B=rep(letters[2:21],10000),C=rep(letters[3:22],10000))

Я пытаюсь разделить данные на два подмножества - обучение и тестирование.

s=sample(dim(df[1],.6*dim(df)[1])
training=df[s,]
testing=df[-s,]

Есть ли способ взять выборку из df так, чтобы в каждом из результирующих подмножеств был хотя бы один фактор? То есть из столбца A-J мне нужен хотя бы один экземпляр каждого из факторов как в обучающем, так и в тестовом наборах.

Я попробовал Случайное подмножество, содержащее хотя бы один экземпляр каждого фактора., но не может применить его к нескольким столбцам, в отличие от одного, используемого в примере.


person alex    schedule 01.11.2016    source источник
comment
Вы можете взглянуть на этот вчерашний вопрос: stackoverflow.com/questions/40353057/   -  person Dave2e    schedule 01.11.2016
comment
@Dave2e, этот пример верен для одной переменной, а не для 10, которые мне интересны в разделении   -  person alex    schedule 01.11.2016


Ответы (2)


Я думаю, вы хотите сделать стратифицированную выборку. В R есть несколько вариантов сделать это, например. strata в пакете sampling. Ознакомьтесь с этим обсуждением.

person metasequoia    schedule 01.11.2016

s=createDataPartition(paste(df$A, df$B,df$C),p=.6,list=FALSE)
training=df[s,]
testing=df[-s,]

работал

person alex    schedule 01.11.2016