data.table effiziente Alternative zur gruppierten Zuweisung als DT [, x: = f (y), by = z]?

8

Ich suche nach der besten Alternative zu der noch nicht (nach meinem Wissen) umgesetzten Zuordnung durch Verweis in einer data.table nach Gruppen. Verwenden Sie das Beispiel data.table

%Vor%

Ich möchte eine neue Spalte z hinzufügen, die f (y, v) enthält, gruppiert nach Werten von x (nehmen wir f (y, v) = mittel (y) + v). Beachten Sie, dass ich das Ergebnis dieser Berechnung nicht wie in

drucken oder speichern möchte %Vor%

, aber ich möchte das Ergebnis zu DT hinzufügen:

%Vor%

meine data.table hat 262 MB, so dass

%Vor%

ist keine Option, da ich DT nicht zweimal in den Speicher passen kann (was durch die Kopieroperation impliziert wird, denke ich). Tatsache ist, dass ich diese Operation noch nie gesehen habe.

Welche Alternativen habe ich (bis data.table mit DT [, z: = Mittelwert (y) + v, mit = x]) kommt?

Ich habe gerade über DT [newDT] gelesen. Was ist hier falsch?

%Vor%

(was speicherbar ist.) dann:

%Vor%

Aber das ist nicht was ich will. Was ist der Fehler hier?

    
Florian Oswald 24.05.2012, 00:51
quelle

2 Antworten

4
%Vor%     
42- 24.05.2012 03:27
quelle
3

Ich würde Folgendes tun:

%Vor%

Im Grunde teile ich es in zwei Teile: Zuerst berechne ich den Mittelwert von y und füge das zu DT hinzu, dann füge ich v zum Mittelwert von y hinzu. Ich bin mir nicht sicher, ob das wirklich hilft, aber es gibt eine gute Chance, dass der Autor es sich anschaut und uns informiert ;-)

Was Ihre Frage betrifft, warum es nicht funktioniert: Sie haben am Ende zwei data.tables, die Sie zusammenführen möchten: DT und newDT . Beide data.tables haben jeden Schlüssel dreimal. Wenn Sie sie zusammenführen, ist natürlich jede Kombination in den Ergebnissen enthalten, und deshalb erhalten Sie eine data.table mit 9 a, b und c.

Um es auf Ihre Weise zu machen, die meiner ganz ähnlich ist, brauchen Sie einen zweiten Schlüssel:

%Vor%     
Christoph_J 24.05.2012 07:18
quelle

Tags und Links