data.table - 以编程方式删除列

pal*_*czy 3 r data.table

以编程方式删除列的最佳做法是什么data.table

以下作品:

DT[, c("a", "b") := NULL]
Run Code Online (Sandbox Code Playgroud)

但是当尝试使用存储列名称的变量来执行此操作时

cols.to.del <- c("a", "b")
DT[, cols.to.del := NULL]
Run Code Online (Sandbox Code Playgroud)

它没有严重失败,因为cols.to.del没有在正确的环境中评估.

akr*_*run 6

我们可以将它包装在括号内,然后将assign(:=)分配给'NULL'(首选方式)

DT[, (cols.to.del) := NULL]
Run Code Online (Sandbox Code Playgroud)

或者另一个选项(如果我们不想用括号括起来)将循环遍历循环中的'cols.to.del' for并分配给NULL

for(j in seq_along(cols.to.del)){
    DT[, cols.to.del[j] := NULL]
}
Run Code Online (Sandbox Code Playgroud)

或子集划分列,我们可以使用setdiffwith=FALSE.

DT[, setdiff(names(DT), cols.to.del), with=FALSE]
Run Code Online (Sandbox Code Playgroud)

  • @paljenczy请注意,第三个版本不会从`DT`中删除列; 而且该命令的输出是_new_`data.table`,你必须_assign_(通过复制)到'DT`,这可能是低效的. (6认同)