Как получить все комбинации списка без повторяющихся элементов? - PullRequest
1 голос
/ 08 ноября 2019

У меня есть список с 40000 элементов, только 16 из которых являются уникальными, но все они имеют различный вес.

    letters = letters[1:16]
    freq=c(8221, 6717, 4912, 3810, 3409, 2807, 2607, 2406, 2206, 1203,  501,  401,  301,  201,  201,  100)
    list = rep(letters,freq)

Я пытаюсь получить 10000 комбинаций из 4 из этого списка (исчерпывая каждую букву в списке), но суть в том, что ни одна буква не может повторяться в каждой перестановке. Комбинации могут повторяться («ABCD» может появляться более одного раза), но одна и та же буква не может появляться в комбо («AABC» или «FFGH» не должны учитываться).

В качестве альтернативы, я попытался работать сэто как фрейм данных с буквой и частотой в качестве переменных, в отличие от гигантского списка, который у меня был выше.

    letters = letters[1:16]
    freq=c(8221, 6717, 4912, 3810, 3409, 2807, 2607, 2406, 2206, 1203,  501,  401,  301,  201,  201,  100)
    df = data.frame(letters,freq)

Есть идеи?

1 Ответ

0 голосов
/ 08 ноября 2019

при выборке вы можете указать вероятности

    freq=c(8221, 6717, 4912, 3810, 3409, 2807, 2607, 2406, 2206, 1203,  501,  401,  301,  201,  201,  100)

    COMBI = lapply(1:10000,function(i){
sample(letters[1:16],4,prob=freq/sum(freq),replace=F)
})
table(sapply(COMBI,function(i)length(unique(i))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...