1
在data.table
中以编程方式删除列的最佳做法是什么?data.table - 以编程方式删除列
以下工作:
DT[, c("a", "b") := NULL]
但是,试图使用存储列名
cols.to.del <- c("a", "b")
DT[, cols.to.del := NULL]
它没有严重的cols.to.del
没有在正确的环境评估的一个变量来做到这一点的时候。
在data.table
中以编程方式删除列的最佳做法是什么?data.table - 以编程方式删除列
以下工作:
DT[, c("a", "b") := NULL]
但是,试图使用存储列名
cols.to.del <- c("a", "b")
DT[, cols.to.del := NULL]
它没有严重的cols.to.del
没有在正确的环境评估的一个变量来做到这一点的时候。
我们可以把它包在括号内,然后分配(:=
)到“NULL”(首选方式)
DT[, (cols.to.del) := NULL]
还是其他选项(如果我们不想用括号把它包起来)将循环遍历for
循环的“cols.to.del”,并指定为NULL
for(j in seq_along(cols.to.del)){
DT[, cols.to.del[j] := NULL]
}
或为子集划分列,我们可以用setdiff
与一起。
DT[, setdiff(names(DT), cols.to.del), with=FALSE]
第三个版本绝对是我的最爱。谢谢! – paljenczy
@paljenczy请注意,第三个版本不会从'DT'删除列;而是该命令的输出是_new_'data.table',您必须_assign_(通过复制)到'DT',这可能是低效的。 – MichaelChirico
@MichaelChirico指出,谢谢! – paljenczy