Cualquiera de los siguientes eliminará la columna foo
de data.table df3
:
# Method 1 (and preferred as it takes 0.00s even on a 20GB data.table)
df3[,foo:=NULL]
df3[, c("foo","bar"):=NULL] # remove two columns
myVar = "foo"
df3[, (myVar):=NULL] # lookup myVar contents
# Method 2a -- A safe idiom for excluding (possibly multiple)
# columns matching a regex
df3[, grep("^foo$", colnames(df3)):=NULL]
# Method 2b -- An alternative to 2a, also "safe" in the sense described below
df3[, which(grepl("^foo$", colnames(df3))):=NULL]
data.table también admite la siguiente sintaxis:
## Method 3 (could then assign to df3,
df3[, !"foo"]
aunque si en realidad estaban esperando para extraer la columna "foo"
de df3
(en lugar de sólo la impresión de una vista de df3
la columna menos "foo"
) que realmente te quiere utilizar el método 1 en su lugar.
(Tenga en cuenta que si utiliza un método que se basa en grep()
o grepl()
, debe establecerlo en pattern="^foo$"
lugar de hacerlo "foo"
, si no desea que las columnas con nombres como "fool"
y "buffoon"
(es decir, las que contienen foo
como una subcadena) también coincidan y se eliminen).
Opciones menos seguras, bien para uso interactivo:
Los siguientes dos modismos también funcionarán, si df3
contiene una coincidencia de columna"foo"
, pero fallarán de una manera probablemente inesperada si no lo hace. Si, por ejemplo, usa alguno de ellos para buscar la columna inexistente "bar"
, terminará con una tabla de datos de fila cero.
Como consecuencia, son realmente más adecuados para el uso interactivo donde uno podría, por ejemplo, querer mostrar una tabla de datos menos cualquier columna con nombres que contengan la subcadena "foo"
. Para fines de programación (o si realmente desea eliminar la (s) columna (s) en df3
lugar de una copia de ella), los Métodos 1, 2a y 2b son realmente las mejores opciones.
# Method 4:
df3[, .SD, .SDcols = !patterns("^foo$")]
Por último, hay enfoques que usan with=FALSE
, aunque data.table
gradualmente se aleja del uso de este argumento, por lo que ahora se desaconseja dónde puede evitarlo; que se muestra aquí para que sepa que la opción existe en caso de que realmente la necesite:
# Method 5a (like Method 3)
df3[, !"foo", with=FALSE]
# Method 5b (like Method 4)
df3[, !grep("^foo$", names(df3)), with=FALSE]
# Method 5b (another like Method 4)
df3[, !grepl("^foo$", names(df3)), with=FALSE]
dt
lugar dedf3
...