2016-09-27 28 views
1

用一個簡單的數據表正火由列:data.table方式

ID MAX X1 X2 X3 X4 
E0 9 2 1 2 3 
E0 21 9 0 10 2 

開始,我想通過MAXX1所有列正常化X4分。

的unelegant,data.frame辦法是

dt$X1 <- dt$X1/dt$MAX 

什麼是高雅的數據表的方式?

我試圖與dt[, .SD/MAX, by = ID],但這也降低了MAX爲1

+1

我覺得'dt [,.SD/MAX,by =。(ID,MAX)]'是你正在尋找的。 – Jaap

回答

5

使用data.table v1.9.7,我們也可以在.SDcols指定列,由「MAX」通過列(lapply(.SD, ...),除循環和分配( :=)輸出回到感興趣的列。

dt[, paste0("X", 1:4) := lapply(.SD, `/`, MAX), .SDcols= X1:X4] 
dt 
# ID MAX  X1  X2  X3  X4 
#1: E0 9 0.2222222 0.1111111 0.2222222 0.3333333 
#2: E0 21 0.4285714 0.0000000 0.4761905 0.0952381