2016-05-17 9 views
3

Betrachten wir die beiden folgenden data.tables:data.table Gruppe von Nicht-ID-Spalte in Tabelle verbunden

x <- data.table(id=c(1,2,3,4),cost=c(0.7,0.2,0.5,0.9)) 
y <- data.table(id=c(1,2,3,4),group=c(1,2,1,2)) 
setkey(x,id) 
setkey(y,id) 

Ich möchte Kosten normalisieren, indem der Mittelwert subtrahiert wird, die von der Gruppe in y gruppiert.

Mein Versuch ist wie folgt jedoch R einen Fehler gibt, dass es nicht ‚Gruppe‘ finden:

x[y,cost:=(cost-mean(cost)),by=.(group)] 

Gibt es einen guten Weg, um diesen Vorgang auszuführen, ohne eine Spalte x hinzufügen?

+2

Was Sie geschrieben haben (* sollte * funktionieren) (https://github.com/Rdatatable/data.table/issues/1688), es tut es einfach noch nicht. – eddi

+1

Ich denke, jetzt könntest du 'x [y, group: = i.group] [, kosten: = cost - mean (cost), by = group]' machen. Oder vielleicht das 'x [y, kosten: = Kosten - ave (Kosten, i.group)]' –

+0

Dank David, letzteres scheint gut für mich zu arbeiten. – user2506086

Antwort

0

Funktioniert das für Sie?

output <- y[x][, normcost:=(cost-mean(cost)), by=group] 

output 
# id group cost normcost 
# 1: 1  1 0.7  0.10 
# 2: 2  2 0.2 -0.35 
# 3: 3  1 0.5 -0.10 
# 4: 4  2 0.9  0.35 
Verwandte Themen