Ich habe eine data.table mit 3 Spalten: ID, Zeit und Status. Für jede ID möchte ich den Datensatz mit der maximalen Zeit finden - dann, wenn für diesen Datensatz der Status wahr ist, möchte ich ihn auf false setzen, wenn die Zeit & gt; 7 (zum Beispiel). Ich mache es auf die folgende Art.
%Vor%Ich habe viele Daten, mit denen ich arbeite, und möchte diesen Vorgang beschleunigen. Irgendwelche Vorschläge würden geschätzt werden!
Wenn ich mich nicht irre, ist dies kein Join, da x[,.N, by=id][,cumsum(N)]
die Zeilenindizes der letzten Elemente pro Gruppe zurückgibt.
Aktualisierung: Nachdem man den Geschwindigkeitsvergleich gesehen hat, scheint dieser der Sieger zu sein und sollte zuerst aufgeführt werden
Dies war mein erster Versuch, der sich als der langsamste aller vorgeschlagenen Lösungen herausgestellt hat.
%Vor% Ein data.table
Ansatz ist
als x[order(time), .I[.N], by=id]$V1
gibt uns den Zeilenindex der maximalen time
für jede Gruppe ( id
)
Und wenn wir uns die Antwort von @ Floo0 ausleihen, können wir es leicht zu
vereinfachen %Vor%Geschwindigkeitsvergleich
Ein Geschwindigkeitstest der verschiedenen Antworten (und die Schlüssel auf den Daten halten)
%Vor%Tags und Links r data.table