Ich habe einen Datenbereich von 180.000 x 400, wobei die Zeilen den Benutzern entsprechen, aber jeder Benutzer genau zwei Zeilen hat.
%Vor%Ich möchte die Daten so unterteilen, dass nur die letzte Zeile für jeden Benutzer beibehalten wird (d. h. die Zeile mit dem höchsten Wert für das Datum für jede ID).
Ich habe versucht, which()
looping ids
mit einer ifelse()
Anweisung in sapply()
zu verwenden, was sehr langsam war ( O(n^2)
glaube ich).
Dann habe ich versucht, die df
by id
zu sortieren und dann in Zweierschritten zu durchlaufen und benachbarte Daten zu vergleichen, aber das war auch langsam (ich schätze, weil Schleifen in R hoffnungslos sind). Der Vergleich der beiden Daten ist der Flaschenhals, da die Art ziemlich unmittelbar war.
Gibt es eine Möglichkeit, den Vergleich zu vektorisieren?
LÖSUNG von Entfernen von Dubletten, die den Eintrag mit dem größten absoluten Wert enthalten
%Vor%Läuft sehr schnell !!
Hier ist ein einfacher und schneller Ansatz mit dem Paket data.table
%Vor% Oder (könnte etwas schneller sein, weil eingegeben wurde by
Oder verwenden Sie die OP-Idee über das data.table
-Paket
Oder
%Vor%Oder Basis-R-Lösung
%Vor%Ein anderer Weg
%Vor%Oder
%Vor%Oder
%Vor%