Я хотел бы получить общее правило, как бороться с этим подходом.У меня есть большие данные, но ниже приведен типичный пример:
set.seed(2019)
myFun <- function(n = 50) {
a <- do.call(paste0, replicate(5, sample(LETTERS, n, TRUE), FALSE))
paste0(a, sprintf("%04d", sample(9999, n, TRUE)), sample(LETTERS, n, TRUE))
}
names = myFun()
group = round(runif(50, 0, 4))
condit = ifelse(round(runif(50, 0, 1.2)) > 0, "TRUE", "FALSE")
edf <- data.frame(names, group, condit, stringsAsFactors = F)
> head(edf)
names group condit
1 NPWZX7229I 1 FALSE
2 FTANS2931N 0 TRUE
3 XUUGJ9010I 1 FALSE
4 THMIQ8703O 2 TRUE
5 NRLLS3573V 1 TRUE
6 LCETQ1320W 0 FALSE
Проблема состоит в том, чтобы разделить (кластеризовать) эти данные на N групп с ограничениями:
скажем N= 5,
каждая группа должна иметь, возможно, одинаковое количество значений ИСТИНА и ЛОЖЬ (как можно ближе к нему, если нет 50% -ной ставки)
каждая группа должна иметь, возможно,то же количество значений из столбца group
.
Так, например, для N = 5 мы бы взяли вручную:
names group condit
wrd0 0 TRUE
wrd1 0 TRUE
wrd2 1 TRUE
wrd3 1 FALSE
wrd4 2 FALSE
wrd5 2 FALSE
wrd6 3 TRUE
wrd7 3 FALSE
wrd8 4 FALSE
wrd9 4 TRUE
Это идеально, но как автоматически повторить это длядругие группы?Это какая-то библиотека (наверняка), но я не знаю, что использовать.Кластер?Или, может быть, какой-то метод наименьших квадратов?Какую библиотеку использовать?Спасибо.
Предложение случайного разбиения имеет некоторый смысл и результат:
split(edf, sample(1:N, nrow(df), replace=T))
Но я знаю, что это могло бы быть лучше.