2014-10-16 52 views
2

背景:我正在使用包含7个有序代码级别的定性数据编码方案。其中五个包含一个选项,两个包含两个互斥选项。一个给定的代码可以是多达七个组件代码的串联,但它们必须按照级别的顺序发生(因此我们有排列而不是组合)。困难的部分是代码可能包含任何数量的级别,1-7。长度变化时生成所有排列

级别1:甲
级别2:B或C
级别3:d或E
等级4:F
第5级:ģ
等级6:H
第7级:我

同样有效的例子代码:ABDFGHI,ACF,我,FGHI,ACE,FH

问题:我需要创建所有有效代码的列表,但是由于排列可能有任何长度,所以我在策略上挣扎,并且我找不到在此提出的相关现有问题。我最初的意图是使用R,但任何方式我可以得到一个完整的列表是值得欢迎的。有什么指针?

回答

4

我不确定你是如何需要你的输出,但这是有效的。将每个级别分配给一个变量,但向其添加一个NA。然后使用expand.grid像这样:

L1<-c("A",NA) 
L2<-c("B","C",NA) 
L3<-c("D","E",NA) 
L4<-c("F",NA) 
L5<-c("G",NA) 
L6<-c("H",NA) 
L7<-c("I",NA) 
expand.grid(L1=L1,L2=L2,L3=L3,L4=L4,L5=L5,L6=L6,L7=L7) 

输出的每一行都将是一个组合,但它会包括NA对于不包括的变量。请注意288最后一行全是NA

注,获得一排没有NA你可以做(​​使用行283为例):

Levels<-expand.grid(L1=L1,L2=L2,L3=L3,L4=L4,L5=L5,L6=L6,L7=L7) 
Levels[283,][!is.na(Levels[283,])] 
+0

我想这也应该给予同样的结果'expand.grid(MGET(LS(模式= “^ L \\ d +”)))' – akrun 2014-10-16 17:04:23

+0

谢谢,这太棒了!注意最后一行代码需要右括号(])。 – spearmint 2014-10-16 17:09:18

+0

@spearmint谢谢,修正。 – 2014-10-16 17:15:29