按列规范化:data.table方法

三诊断

从一个简单的数据表开始

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

我想规范化从X1X4除的所有列MAX

明确的data.frame方式是

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

优雅的数据表方式是什么?

我尝试使用dt[, .SD/MAX, by = ID],但这也将MAX减小为1。

阿克伦

使用data.table v1.9.7,我们还可以指定中的列.SDcols,遍历各列(lapply(.SD, ...),除以'MAX',然后将(assign :=)输出分配给感兴趣的列。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章