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