Удалите несколько столбцов из data.table
Каков правильный способ удаления нескольких столбцов из таблицы data.table? В настоящее время я использую код ниже, но получал неожиданное поведение, когда я случайно повторил одно из имен столбцов. Я не был уверен, что это ошибка, или если я не должен удалять столбцы таким образом.
library(data.table)
DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","y") := NULL]
names(DT)
[1] "z"
Вышеописанное работает отлично, но
DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","x") := NULL]
names(DT)
[1] "z"
Ответы
Ответ 1
Это похоже на твердую, воспроизводимую ошибку. Он был зарегистрирован как Ошибка № 2791.
Похоже, что повторение столбца пытается удалить последующие столбцы.
Если столбцов не осталось, R сбой.
UPDATE: теперь исправлено в v1.8.11. Из NEWS:
Присвоение одного и того же столбца дважды в одном и том же запросе теперь является ошибкой, а не сбоем при некоторых обстоятельствах; например, DT [, c ( "B", "B" ): = NULL] (дважды удалить по ссылке один и тот же столбец). Спасибо Рикардо (# 2751) и matt_k (# 2791) за отчетность. Добавлены тесты.
Ответ 2
Этот Q был дан ответ, но рассматриваем это как примечание.
Я предпочитаю следующий синтаксис для удаления нескольких столбцов
DT[ ,`:=`(x = NULL, y = NULL)]
потому что он совпадает с тем, чтобы добавить несколько столбцов (переменных)
DT[ ,`:=`(x = letters, y = "Male")]
Это также проверяет наличие дублированных имен столбцов. Поэтому попытка сбросить x
дважды вызовет сообщение об ошибке.