Я использовал чудесную функцию combn из пакета utils . Эта функция создает все возможные комбинации без повторений Описание комбинации . Я собираюсь представить одно использование функции, которую мне нужно сделать, но она не определена в функции combn. Я хотел бы представить это с хорошим примером. Тем не менее, реальная цель, которую мы хотим достичь, является более сложной, и она будет выполняться с большим количеством данных.
Мы хотим сыграть в игру, в которую могут играть только 3 человека . Однако мы 4 человека . Мы хотим знать все возможные группы для игры. Имена участников: Алекс , Дэвид , Джон и Зоя .
Возможные комбинации:
names <- c("Alex","David","John","Zoe")
people.per.group <- 3
combn(names,people.per.group)
#Output
[,1] [,2] [,3] [,4]
[1,] "Alex" "Alex" "Alex" "David"
[2,] "David" "David" "John" "John"
[3,] "John" "Zoe" "Zoe" "Zoe"
Однако у нас есть проблемы, потому что У Алекса нет хороших отношений с Джоном . Таким образом, мы не хотим включать их обоих в группу . Чтобы мы могли создавать группы для людей, которых мы можем выбрать только одну из них.
# Alex --> Group 1
# David --> Group 2
# John --> Group 1
# Zoe --> Group 3
only.one.per.group <- c(1,2,1,3)
Я ищу функцию, которая позволяет мне делать то же самое, что и combn, но ограничивает комбинации только переменной.one.per.group. Называя функцию, которую я с нетерпением жду, чтобы использовать var.combn, код будет:
names <- c("Alex","David","John","Zoe")
only.one.per.group <- c(1,2,1,3)
people.per.group <- 3
var.combn(names,people.per.group,only.one.per.group)
#Output
[,1] [,2]
[1,] "Alex" "David"
[2,] "David" "John"
[3,] "Zoe" "Zoe"
Я давно искал подобную функцию. Таким образом, было бы очень полезно, если бы вы могли сказать мне функцию для этого или любой другой способ, который приходит вам на ум.
Я надеюсь, что вам понравился пример, и я хотел бы получить какие-либо идеи о том, как это сделать.