R 按列规范化:data.table方式

R 按列规范化:data.table方式,r,data.table,R,Data.table,从一个简单的数据表开始 ID MAX X1 X2 X3 X4 E0 9 2 1 2 3 E0 21 9 0 10 2 我想将所有列从X1到X4除以MAX进行规范化 不合法的data.frame方式是 dt$X1 <- dt$X1/dt$MAX dt$X1使用data.table v1.9.7,我们还可以指定中的列。SDcols,循环通过列(lapply(.SD,),除以“MAX”,并将输出分配回感兴趣的列 dt[, paste0("X", 1:4) := lapply(

从一个简单的数据表开始

ID MAX X1 X2 X3 X4
E0 9   2  1  2  3
E0 21  9  0  10 2
我想将所有列从
X1
X4
除以
MAX
进行规范化

不合法的data.frame方式是

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

dt$X1使用
data.table v1.9.7
,我们还可以指定
中的列。SDcols
,循环通过列(
lapply(.SD,
),除以“MAX”,并将输出分配回感兴趣的列

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

我认为
dt[,.SD/MAX,by=(ID,MAX)]
就是你要找的。重要的一点是
.SDcols
,你也可以省略
lappy()
这里:
dt[,X1:X4:=.SD/MAX,.SDcols=X1:X4]