2016-11-19 4 views
2

Ich mache gerade die Datenspeicher-Datenspeicher-Übungen und es gibt etwas, das meinen Sinn für Logik wirklich stört. Irgendwie werden Spalten, auf die sich der Operator "by" bezieht, anders behandelt als andere Spalten?R data.table "j" Verweis auf "by" Variablen sehr unintuitiv?

Die verwendeten Datentabelle ist folgende:

  DT 
     x y z 
    1: 2 1 2 
    2: 1 3 4 
    3: 2 5 6 
    4: 1 7 8 
    5: 2 9 10 
    6: 2 11 12 
    7: 1 13 14 

Wenn ich DT eingeben [, Summe (x), x] Ich würde erwarten:

x V1 
1: 2 8 
2: 1 3 

aber ich bekomme:

x V1 
1: 2 2 
2: 1 1 

für andere Spalten bekomme ich die Gruppensumme, wie ich es erwarten würde:

> DT[,sum(y),x] 
     x V1 
    1: 2 26 
    2: 1 23 
+0

Danke für die schnelle Antwort zu nennen. Es ist mehr eine Frage des Stils, als einen Workaround zu finden. Aber deine scheint sehr geradlinig. – Cracker

+0

Die Dokumentation sagt ".BY ist eine Liste, die einen Vektor der Länge 1 für jedes Element in' by' "enthält und das gilt auch für alle Spalten, die in' by' erscheinen. Sie könnten 'x * .N' machen, um auch die Summe zu erhalten. – Frank

Antwort

0

Eine Möglichkeit, dies zu beheben wäre, die Gruppenvariable mit einem anderen Namen

setnames(DT[, sum(x), .(xN=x)], "xN", "x")[] 
# x V1 
#1: 2 8 
#2: 1 3 
Verwandte Themen