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.
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.
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:
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.
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.
Tags und Links r