Wie behalte ich Kombinationen von Variablen, die bei der Gruppierung mit data.table nicht in den Eingabedaten erscheinen?

8

Mit Hilfe des data.table -Pakets ist es möglich, die Datenerhaltung zusammenzufassen Kombinationen von Variablen, die nicht in der Eingabe erscheinen?

Mit plyr Paket weiß ich, wie man das mit dem Argument .drop macht, zum Beispiel:

%Vor%

Ausgabe:

%Vor%

In diesem Fall behalte ich alle Gruppen / Kategorien-Kombinationen, selbst wenn die Summe 0 ist.

    
Davi Moreira 23.01.2013, 17:27
quelle

1 Antwort

8

Gute Frage. Hier sind zwei Möglichkeiten. Beide benutzen By-ohne-By.

%Vor%

wobei CJ für Cross Join steht, siehe ?CJ . by-within-by bedeutet nur, dass j für jede Gruppe ausgeführt wird, mit der jede Zeile von i verknüpft ist.

Zugegeben, es sieht auf den ersten Blick schwierig aus. Die Idee ist, dass, wenn Sie eine bekannte Teilmenge von Gruppen haben, diese Syntax schneller ist, als alles zu gruppieren und dann nur die Ergebnisse auszuwählen, die Sie benötigen. Aber in diesem Fall würden Sie sowieso alles mögen, also ist es nicht viel Vorteil, außer in der Lage zu sein, nach Gruppen zu suchen, die nicht in den Daten existieren (was Sie mit by nicht tun können).

Eine andere Möglichkeit besteht darin, zuerst by als normal einzugeben und dann das CJ() -Ergebnis mit dem folgenden zu verknüpfen:

%Vor%

, aber dann erhalten Sie NA statt der gewünschten 0. Diese könnten mit set() ersetzt werden, wenn nötig. Der zweite Weg könnte schneller sein, weil die zwei unique -Aufrufe eine viel kleinere Eingabe erhalten.

Beide Methoden können in kleine Hilfsfunktionen eingebunden werden, wenn Sie dies häufig tun.

    
Matt Dowle 23.01.2013, 18:16
quelle

Tags und Links