2016-06-20 7 views
0

nehme an, ich habe zwei Vektor wie folgt aus:berechnen die repeatence von Kombinationen Elemente in R

l1 = c('C','D','E','F') 
l2 = c('G','C','D','F') 

I erzeugen alle Kombinationen von zwei Elementen mit combn Funktion:

l1_vector = t(combn(l1,2)) 
l2_vector = t(combn(l2,2)) 

> l1_vector 
    [,1] [,2] 
[1,] "C" "D" 
[2,] "C" "E" 
[3,] "C" "F" 
[4,] "D" "E" 
[5,] "D" "F" 
[6,] "E" "F" 

> l2_vector 
    [,1] [,2] 
[1,] "G" "C" 
[2,] "G" "D" 
[3,] "G" "F" 
[4,] "C" "D" 
[5,] "C" "F" 
[6,] "D" "F" 

Jetzt möchte ich das berechnen wiederholen Elemente l1_vector und l2_vector, wie das Beispiel i geben, sollte die Wiederholung von Elementen sein 3 (["C","D"],["C","F"],["D","F"])

Wie kann ich das ohne Schleife tun?

+4

'merge (l1_vector, l2_vector)'? – Jota

+0

Jota, das funktioniert! Wirklich ein netter Trick, danke! – jjdblast

Antwort

2

Wie in den Kommentaren erwähnt, können Sie die Funktion dafür verwenden. Da das Standardverhalten merge der verfügbaren Spalten verwendet, gibt es nur die Zeilen zurück, die perfekt übereinstimmen.

> merge(l1_vector, l2_vector) 
    V1 V2 
1 C D 
2 C F 
3 D F 
> 
> nrow(merge(l1_vector, l2_vector)) 
[1] 3 
1

Während merge für Ihren Fall völlig in Ordnung ist, gibt es einige Arbeit um.

Wenn Sie nur die Anzahl der wiederholten Elemente benötigen:

choose(length(intersect(l1, l2)), 2) 
[1] 3 

Wenn Sie die wiederholten Elemente benötigen:

t(combn(intersect(l1, l2), 2)) 
    [,1] [,2] 
[1,] "C" "D" 
[2,] "C" "F" 
[3,] "D" "F"