2016-04-06 25 views
2

Her bir gruptaki ortalama değeri çıkararak bir data.table değişkenini normalize etmeye çalışıyorum.Bir değişken data.table normalleştirin

dx <- data.table(x=c(1,3,5,1,8,11),group=factor(c(1,1,1,2,2,2))) 
dy <- dx[,.(xmean=mean(x)),by=.(group)] 
setkey(dx,group) 
setkey(dy,group) 
dx[dy,x_norm:=x-xmean] 

Bunu yapmanın daha özlü bir yol olup olmadığını merak ediyorum: Ben aşağıdaki şekilde bunu yapmış?

+1

, yolunuzu, oldukça verimli olmalı "mean" kelimesini kullandığınızda, burada açıklandığı gibi bazı özel optimizasyonlar vardır: http://stackoverflow.com/q/22137591 dx [, xm: = mean (x), by = group] [, \ ': = \' (x_norm = x-xm, xm = NULL)] ' – Frank

cevap

7

Bunu yapmak için scale işlevini kullanabilirsiniz:

dx[, x_norm := scale(x, center = TRUE, scale = FALSE), by = group] 

Bu, @Hadd E. Nuff yolunda eşdeğerdir: Bu arada

dx[, x_norm := x - mean(x), by = group] 
+0

Bu mükemmel, teşekkürler! – user2506086

İlgili konular