2010-05-21 92 views
2

變得更加具體地,在這裏是一個例子:R中是否存在expand.grid類似的函數,返回排列?

> expand.grid(5, 5, c(1:4,6),c(1:4,6)) 
    Var1 Var2 Var3 Var4 
1  5 5 1 1 
2  5 5 2 1 
3  5 5 3 1 
4  5 5 4 1 
5  5 5 6 1 
6  5 5 1 2 
7  5 5 2 2 
8  5 5 3 2 
9  5 5 4 2 
10 5 5 6 2 
11 5 5 1 3 
12 5 5 2 3 
13 5 5 3 3 
14 5 5 4 3 
15 5 5 6 3 
16 5 5 1 4 
17 5 5 2 4 
18 5 5 3 4 
19 5 5 4 4 
20 5 5 6 4 
21 5 5 1 6 
22 5 5 2 6 
23 5 5 3 6 
24 5 5 4 6 
25 5 5 6 6 

此數據幀是從所提供的載體的所有組合創建。我想創建一個類似的數據框從提供的載體的所有permutations。請注意,每行必須包含2個5,但不一定是第2個。 謝謝。

+0

我不明白這個問題,你能顯示你想要的輸出看起來像什麼?排列通常在集合上進行,而不是在集合上進行,所以我不確定函數應該做什麼。 – 2010-05-21 16:14:51

+0

@Ken Williams,再舉一個例子,除了5,5,1,2和5,5,2,1之外,我還想在結果集5,1,5,2 - 5,2,5, 1 - 5,1,2,5 - 5,2,1,5 - 1,5,2,5 - 2,5,1,5 - 1,5,5,2 - 2,5,5,1 - 1,2,5,5和2,1,5,5。如果我是正確的,那麼結果數據框的尺寸應該是:[150,4] – Brani 2010-05-21 20:50:31

回答

2

下面的代碼工作。 (依靠從gtools排列)

comb <- t(as.matrix(expand.grid(5, 5, c(1:4,6),c(1:4,6)))) 
perms <- t(permutations(4,4)) 
ans <- apply(comb,2,function(x) x[perms]) 
ans <- unique(matrix(as.vector(ans), ncol = 4, byrow = TRUE)) 
+0

非常好!我發現奇怪的是, – Brani 2010-05-22 11:09:12

+0

中沒有內置這樣的函數爲什麼要內置它?在外部包裝中有什麼問題? – Dason 2012-05-21 02:29:06

0

嘗試使用vegan包中的?allPerms

相關問題