Remove multiple columns from data.table

Rdata.table

R Problem Overview


What's the correct way to remove multiple columns from a data.table? I'm currently using the code below, but was getting unexpected behavior when I accidentally repeated one of the column names. I wasn't sure if this was a bug, or if I shouldn't be removing columns this way.

library(data.table)
DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","y") := NULL]
names(DT)
[1] "z"

The above works fine, but

DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","x") := NULL]
names(DT)
[1] "z"

R Solutions


Solution 1 - R

This looks like a solid, reproducible bug. It's been filed as Bug #2791.

It appears that repeating the column attempts to delete the subsequent columns.
If no columns remain, then R crashes.


UPDATE : Now fixed in v1.8.11. From NEWS :

> Assigning to the same column twice in the same query is now an error rather than a crash in some circumstances; e.g., DT[,c("B","B"):=NULL] (delete by reference the same column twice). Thanks to Ricardo (#2751) and matt_k (#2791) for reporting. Tests added.

Solution 2 - R

This Q has been answered but regard this as a side note.

I prefer the following syntax to drop multiple columns

DT[ ,`:=`(x = NULL, y = NULL)]

because it matches the one to add multiple columns (variables)

DT[ ,`:=`(x = letters, y = "Male")]

This also check for duplicated column names. So trying to drop x twice will throw an error message.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionmatt_kView Question on Stackoverflow
Solution 1 - RRicardo SaportaView Answer on Stackoverflow
Solution 2 - RPankil ShahView Answer on Stackoverflow