以编程方式删除列的最佳做法是什么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没有在正确的环境中评估.
我们可以将它包装在括号内,然后将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)
或子集划分列,我们可以使用setdiff随with=FALSE.
DT[, setdiff(names(DT), cols.to.del), with=FALSE]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2115 次 |
| 最近记录: |