2015-12-19 4 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] 

Или другой вариант (в случае, если мы не хотим, чтобы обернуть его в квадратных скобках) было бы петлю над «cols.to.del» в for цикле и присвоить NULL

for(j in seq_along(cols.to.del)){ 
    DT[, cols.to.del[j] := NULL] 
} 

Или для подмножества столбцов, мы можем использовать setdiff вместе с with=FALSE.

DT[, setdiff(names(DT), cols.to.del), with=FALSE] 
+1

Третья версия, безусловно, моя любимая. Благодаря! – paljenczy

+5

@paljenczy отмечают, что третья версия не удаляет столбцы из 'DT'; скорее вывод этой команды - это _new_ 'data.table', который вы должны _assign_ (путем копирования) на' DT', что, вероятно, неэффективно. – MichaelChirico

+1

@MichaelChirico отметил, спасибо! – paljenczy

Смежные вопросы