2016-04-06 7 views
2

私は、各グループ内の平均を差し引いてdata.tableの変数を正規化しようとしています。私は次のようにそれを行っている:変数data.tableを正規化する

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] 

これを行うための、より簡潔な方法がある場合、私は思ったんだけど?あなたがこれを行うにはscale機能を使用することができます

+1

、あなたの方法はかなり効率的である必要があり、それは自分自身で 'mean'を使うとき、ここで説明したような特別な最適化があります:http://stackoverflow.com/q/22137591' dx [、xm:= mean(x)、by = group] [、\ ':= \'(x_norm = x-xm、xm = NULL)] ' – Frank

答えて

7

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

これはの@Hadd E.途切れるの方法と同等です:ところで

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

これは完璧です、ありがとう! – user2506086

関連する問題