编辑值
# example data
DT = as.data.table(mtcars, keep.rownames = TRUE)
编辑列
使用 j 中的:= 运算符创建新列或修改现有列:
DT[, mpg_sq := mpg^2]
编辑行的子集
使用 i 参数子集到行 where 应该进行编辑:
DT[1:3, newvar := "Hello"]
与 data.frame 一样,我们可以使用行号或逻辑测试进行子集化。修改时可以在 i 中使用[ajoin[need_a_link]。
删除列
通过设置为 NULL 删除列:
DT[, mpg_sq := NULL]
请注意,由于 DT 已就地修改,因此我们不会分配结果。
编辑多个列
使用:= 运算符的多变量格式添加多个列:
DT[, `:=`(mpg_sq = mpg^2, wt_sqrt = sqrt(wt))]
# or 
DT[, c("mpg_sq", "wt_sqrt") := .(mpg^2, sqrt(wt))]
当 LHS := RHS 的右侧是列列表时,使用 .() 语法。
编辑多个依赖于顺序的列
如果列是依赖的并且必须按顺序定义,则执行此操作的一些方法是:
DT[, c("mpg_sq", "mpg2_hp") := .(temp1 <- mpg^2, temp1/hp)]
# or
DT[, c("mpg_sq", "mpg2_hp") := {temp1 = mpg^2; .(temp1, temp1/hp)}]
按动态确定的名称编辑列
对于动态确定的列名称,请使用括号:
vn = "mpg_sq"
DT[, (vn) := mpg^2]
使用 set
也可以使用 set 修改列,以减少开销,但这很少是必要的:
set(DT, j = "hp_over_wt", v = mtcars$hp/mtcars$wt)