Я работал над этим некоторое время, и я не могу найти никакого решения, которое бы выполняло то, что мне нужно ...
Проще говоря, у меня есть DF с двумя столбцами, скажем так, 'n' разные строки (например, имена студентов), и 'm' разные имена руководителей.«n» может быть больше или меньше, чем «m».
Задача:
Произвольно назначить 'n' учеников в группы супервизоров 'm' так, чтобы каждый супервайзер получал одинаковое количество учеников в своей группе (или какзакройте как можно больше, если «n» и «m» не являются кратными).
Некоторые ученики уже назначены конкретному руководителю заранееЭто значит, что в начале некоторые группы пусты, а некоторым уже назначены строки.
Предел строк на группу одинаков для каждой группы, это round(n/m)
.
Строки 'n'уже назначенные в одну группу НЕ МОГУТ переключаться на новую группу.
До сих пор я пытался решить проблему с dplyr, играя с разными таблицами, назначая индексы для каждого наблюдения ... но я чувствую, что мой код слишком сложен для этогоТип проблемы, поэтому мне интересно, если кто-нибудь знает более простое решение.
Я оставлю образец своего фрейма данных для наглядности.Конечно, я имею дело с гораздо большим набором данных с разным типом информации.но проблема точно такая же:
У меня есть:
Names_stud (n) Supervisors (m)
Ralph SKINNER
Michael NA
Mitch NA
Julen NA
Richard CARAPAPEL
John NA
Ramon SKINNER
Laura McGONAGALL
Paul NA
Ivy NA
Lucas NA
Mathiew NA
Что бы я хотел иметь:
Names_students Supervisor
Ralph SKINNER
Michael CARAPAPEL
Mitch SKINNER
Julen McGONAGALL
Richard CARAPAPEL
John CARAPAPEL
Ramon SKINNER
Laura McGONAGALL
Paul McGONAGALL
Ivy SKINNER
Lucas McGONAGALL
Mathiew CARAPAPEL
Так, что:
table(DF$Supervisors)
McGONAGALL SKINNER CARAPAPEL
4 4 4
Если «n» не кратно «m», то вполне нормально, чтобы иметь самый близкий результат к этому (например, 4, 3, 3 или 4, 4, 3 ...).
До сих пор я много занимался кодированием с помощью dplyr, назначая индексы ранее назначенным учащимся ... но я всегда где-то застреваю и чувствую, как я с этим справляюсь, уж неэффективно.
Мне интересно, знает ли кто-нибудь конкретное решение, чтобы справиться с этим.Я также проверил пакет «split».Не смог найти ничего полезного для этой цели.
Заранее большое спасибо.Если вам нужны дальнейшие разъяснения, пожалуйста, просто спросите.
PD: Я не смог найти ни одного связанного вопроса с этой конкретной проблемой.Если есть правильный ответ, пожалуйста, дайте мне знать.
Еще раз спасибо заранее.