2014-10-16 46 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