Einzigartige Kombinationen unabhängig von der Position finden [duplizieren]

8

Ich bin sicher, es ist etwas Einfaches, aber ich habe einen Datenrahmen

%Vor%

Und ich möchte einen neuen Datenrahmen, der die einzigartigen Kombinationen von Werten in den Zeilen enthält, unabhängig davon, in welcher Spalte sie sich befinden. Also im obigen Fall würde ich

wollen %Vor%

Ich habe es versucht

%Vor%

aber es sieht (1, 2, 3) als einzigartig aus (2, 3, 1), was ich nicht will.

    
Thomas White 23.04.2015, 09:55
quelle

3 Antworten

5

Vielleicht so etwas

%Vor%     
David Arenburg 23.04.2015, 10:00
quelle
4

Wenn Ihr data.frame ziemlich groß ist, kann die Geschwindigkeit für Sie eine Rolle spielen. Mit der folgenden Idee können Sie doppelte Sätze viel schneller finden.

Lassen Sie uns imaginär jedem möglichen Wert in Zeilen eine Primzahl zuweisen und Produkte für jede Zeile zählen. Zum Beispiel können wir für df primenums = c(2,3,5,7) akzeptieren und Produkte c(30,30,70) zählen. Dann entsprechen die Duplikate in diesem Produktvektor duplizierten Mengen in unserem data.frame. Da die Multiplikation viel schneller als jede Art von Sortierung berechnet wird, können Sie effizienter werden. Der Code folgt.

%Vor%

Hier initialisieren wir den Vektor primenums mit Hilfe der Funktion Primes aus dem Paket numbers , aber Sie können das auch auf andere Weise tun.

Sehen Sie sich das Beispiel an. Hier zeige ich einen Vergleich der Effizienz.

%Vor%

Jetzt, wenn data.frame fertig ist, können wir verschiedene Algorithmen testen.

%Vor%

Es gibt eine wichtige Annahme hier - wir verwenden as.matrix(df) , aber was ist, wenn es nicht nur numerische Variablen in unserem data.frame gibt? Eine einheitlichere Lösung wird wie folgt aussehen:

%Vor%

Und was ist, wenn wir sehr viele Spalten oder sehr verschiedene Variablen haben? In diesem Fall können wir anstelle von prod() sum(log()) verwenden (was für große Zahlen wahrscheinlich noch schneller berechnet wird). Sieh dir das an.

%Vor%

Es ist schwer sich df mit 3 Millionen Spalten vorzustellen, aber hier ist es in Ordnung. Auf diese Weise können wir df einer unglaublich großen Größe mit so vielen Spalten speichern, wie unser RAM aufnehmen kann.

    
inscaven 23.04.2015 13:29
quelle
1

Alternativ bietet das Paket sets eine schnelle Möglichkeit, auf Gleichheit zu prüfen:

%Vor%     
konvas 23.04.2015 10:49
quelle

Tags und Links