2011-01-06 12 views
1

Sagen, ich habe eine Matrix von 5 x 100 von Zahlen zwischen 0 und 100 zum Beispiel:Finding wiederholte Muster in R

1 5 10 15 3 
2 15 3 8 27 
1 22 34 45 35 
28 27 32 3 8 
...... 

mag ich wiederholt „Muster“ von Nummern finden (hauptsächlich Paare oder Tripletts) .

Also in meinem Beispiel würde ich das Paar 3,15 zweimal erscheinen und das Triplet 3, 8, 27 auch zweimal erscheinen (mir ist die Reihenfolge egal).

Wie würden Sie das in R implementieren?

Ich möchte Paare und Drillinge getrennt haben und ihre Zählung haben.

dank nico

Antwort

3

Hier ist ein Weg. Für jede Zeile Ihrer 100-reihigen Matrix finden Sie alle Paare/Tripel von Zahlen (unter Verwendung von combn) und führen eine Häufigkeitszählung (unter Verwendung von table) der Paare/Tripel durch. Die von mir definierte Funktion pasteSort erstellt nach dem Sortieren eine Zeichenfolge aus einem Vektor. Wir wenden diese Funktion auf jedes Paar/Tupel in jeder Zeile an und sammeln alle Paare/Tupel von der Matrix, bevor die Häufigkeit gezählt wird. Beachten Sie, dass, wenn ein Paar auf der gleichen Zeile wiederholt wird, es als "Wiederholung" gezählt wird.

> mtx <- matrix(c(1,5,10,15,3, 
       2, 15, 3, 8, 27, 
       1, 22, 34, 45, 35, 
        28, 27, 32, 3, 8), ncol=5, byrow=TRUE) 
> pasteSort <- function(x) do.call(paste, as.list(sort(x))) 
> pairs <- c(apply(mtx, 1, function(row) apply(combn(row, 2), 2, pasteSort))) 
> pairFreqs <- table(pairs) 
> pairFreqs[ pairFreqs > 1 ] 
3 15 3 27 3 8 8 27 
    2 2 2 2 
> triples <- c(apply(mtx, 1, function(row) apply(combn(row, 3), 2, pasteSort))) 
> tripleFreqs <- table(triples) 
> tripleFreqs[ tripleFreqs > 1 ] 
3 8 27 
    2 
+0

'combn'! Das habe ich vermisst! Ich werde es heute Abend versuchen und ich sage dir, ob es funktioniert! (PS: Zahlen können nicht in der gleichen Zeile wiederholt werden, das ist also kein Problem). – nico

+0

funktioniert perfekt! Vielen Dank! – nico

+0

@nico du bist willkommen –

Verwandte Themen