Datenfeld nach Maximalwerten in jeder Gruppe filtern [duplizieren]

8

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 !!

    
mattdevlin 17.12.2014, 20:29
quelle

2 Antworten

18

Hier ist ein einfacher und schneller Ansatz mit dem Paket data.table

%Vor%

Oder (könnte etwas schneller sein, weil eingegeben wurde by

%Vor%

Oder verwenden Sie die OP-Idee über das data.table -Paket

%Vor%

Oder

%Vor%

Oder Basis-R-Lösung

%Vor%

Ein anderer Weg

%Vor%

Oder

%Vor%

Oder

%Vor%     
David Arenburg 17.12.2014, 20:35
quelle
4

Aggregat sollte auch funktionieren:

%Vor%     
docendo discimus 17.12.2014 20:43
quelle

Tags und Links