2015-12-19 178 views
1

data.table中以編程方式刪除列的最佳做法是什麼?data.table - 以編程方式刪除列

以下工作:

DT[, c("a", "b") := NULL] 

但是,試圖使用存儲列名

cols.to.del <- c("a", "b") 
DT[, cols.to.del := NULL] 

它沒有嚴重的cols.to.del沒有在正確的環境評估的一個變量來做到這一點的時候。

回答

4

我們可以把它包在括號內,然後分配(:=)到「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] 
+1

第三個版本絕對是我的最愛。謝謝! – paljenczy

+5

@paljenczy請注意,第三個版本不會從'DT'刪除列;而是該命令的輸出是_new_'data.table',您必須_assign_(通過複製)到'DT',這可能是低效的。 – MichaelChirico

+1

@MichaelChirico指出,謝謝! – paljenczy