data.table Gruppierung getrennt für numerische und Textvariablen

8

Ich versuche, diesen zweistufigen Prozess data.table zu vereinfachen, der sowohl auf numerische als auch auf Zeichenvariablen wirkt. Z.B. - Nimm das erste Element von textvar und sum für jede der numerischen Variablen. Betrachten Sie dieses kleine Beispiel:

%Vor%

Nun war mein erster Gedanke, .SD zu verschachteln, um die eine Variable aus dem lapply -Aufruf zu entfernen, aber ich fand das ein bisschen kompliziert:

%Vor%

Dann dachte ich, vielleicht könnte ich jede Gruppierung einzeln machen und mich ihnen anschließen, aber das scheint noch schlimmer zu sein:

%Vor%

Gibt es eine einfachere Konstruktion, die die Verschachtelung von .SD oder die Verbindung umgehen würde? Ich habe das Gefühl, etwas elementares zu übersehen.

    
thelatemail 01.09.2016, 00:14
quelle

1 Antwort

9

Das j -argument in data.table ist (absichtlich) ziemlich flexibel. Alles was wir uns merken müssen ist:

  

Solange j eine Liste zurückgibt, wird jedes Element der Liste zu einer Spalte in der resultierenden data.table.

Mit der Tatsache, dass c(list, list) ein list ist, können wir den Ausdruck wie folgt konstruieren:

%Vor%

Hier habe ich den ersten Ausdruck nicht mit list() umschlossen, da textvar[1L] einen length = 1 Vektor zurückgibt. d. h. identical(c(1, list(2, 3)), c(list(1), list(2,3))) ist TRUE .

Beachten Sie, dass dies nur von v1.9.7 möglich ist. Der Fehler wurde erst kürzlich in der aktuellen Entwicklungsversion behoben.

    
Arun 01.09.2016, 00:27
quelle

Tags und Links