用于生成有序组合的函数

时间:2017-06-08 11:19:48

标签: r vector combinations

什么R命令生成长度为k的所有可能的有序组合?

例如,从这个载体:

a,b,c,d  

它希望生成长度为3的所有组合,但只生成保存顺序的那些组合:

a,b,c  
a,b,d  
a,c,d  
b,c,d 

或者如果我有这个载体

a,b,7,d,e

我想对长度2做同样的事情:

a,b  
a,7  
a,d  
a,e  
b,7  
b,d  
b,e  
7,d  
7,e  
d,e
梳子并不在这里工作,因为它为你提供了所有可能的组合,包括反向的组合,如
C,B
在简单的情况下,我可以尝试使用expand.grid,但这两种方法都需要进一步处理 也许有一个基本功能(或包)能够做我想要的,甚至接受更复杂的条件。

PD:当我说"命令"我在谈论起始向量中的出现顺序。我并不是指印刷顺序,尽管在我的例子中它们是相同的。

1 个答案:

答案 0 :(得分:1)

您可以在基础R中使用combn

vec <- c("a", "b", "c", "d")
len <- 2
combn(length(vec), len, function(x) vec[x])

#    [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] "a"  "a"  "a"  "b"  "b"  "c" 
#[2,] "b"  "c"  "d"  "c"  "d"  "d" 

3

combn(length(vec), 3, function(x) vec[x])

#     [,1] [,2] [,3] [,4]
#[1,] "a"  "a"  "a"  "b" 
#[2,] "b"  "b"  "c"  "c" 
#[3,] "c"  "d"  "d"  "d" 

或者@Sotos在评论中指出:

combn(vec, len)