2012-09-03 4 views
10

データフレームには、文字列を含む1つの列があります。注文を気にせずにすべてのベクトルの組み合わせを生成するにはどうすればいいですか?

x <- unique(df[,1]) 
x 
"A" "A" "B" "B" "B" "C" 

私はそうA, BB, Aと同じで、その順序を気にすることなく2のセットなどユニークな文字列のすべての可能な組み合わせを取得したいのですが、私はドン」:のは、それはこのようになりましょうA, Aのような組み合わせで同じ値を取得したいこれまでのところ、私はこの時点まで得た:

comb <- expand.grid(x, x) 
comb <- comb[which(comb[,1] != comb[,2]),] 

しかし、これはまだ別の順序で文字列の同じ組み合わせで列を有するという問題を残しています。どのように私はこれを取り除くのですか?

+2

'x'は**あなたが表示するものに**なる可能性がありません。 'unique()'を 'df [、1]'に適用していればユニークになりますか? –

+0

あなたはそうです、私はそれをデータフレーム列自体の内容を印刷すると混同しました。もちろん、 'x'は重複を含んでいません。 – AnjaM

答えて

16

combn機能はutilsパッケージにあります:

t(combn(LETTERS[1:3],2)) 
#  [,1] [,2] 
# [1,] "A" "B" 
# [2,] "A" "C" 
# [3,] "B" "C" 

私はあなたのxに値を重複している理由として少し混乱しています。

+0

ありがとう、それは私が手に入れたいものです! – AnjaM

12

私はあなたがcombnを探していると思う:

x <- c("A", "A", "B", "B", "B", "C") 
combn(x,2) 

は与える:

 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] 
[1,] "A" "A" "A" "A" "A" "A" "A" "A" "A" "B" "B" "B" "B" "B" "B" 
[2,] "A" "B" "B" "B" "C" "B" "B" "B" "C" "B" "B" "C" "B" "C" "C" 

そして、あなたがxで唯一のユニークな値をしたい場合(私はあなたがxで重複する値を持っている理由はわかりません最初の場所はunique()コールの場合):

> combn(unique(x),2) 
    [,1] [,2] [,3] 
[1,] "A" "A" "B" 
[2,] "B" "C" "C" 
+0

ありがとう、私は 'combn'について知りませんでした。私はBenBarnesの答えを受け入れました。なぜなら、それは私が望む出力を正確に与えるからですが、明らかにあなたも私の質問に答えました。 – AnjaM

関連する問題