如何获取没有重复元素的列表的所有组合?

时间:2019-11-07 21:28:41

标签: r

我有一个包含40,000个元素的列表,其中只有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)

我正在尝试从该列表中获取10,000个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 :(得分:0)

采样时,您可以指定概率

    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))))