Una delle seguenti foo
voci rimuoverà la colonna da 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 supporta anche la sintassi seguente:
## Method 3 (could then assign to df3,
df3[, !"foo"]
anche se si fosse realmente vogliono per rimuovere colonna "foo"
da df3
(in contrasto con appena la stampa di una vista della df3
colonna di meno "foo"
) che ci si vuole veramente utilizzare il metodo 1, invece.
(Si noti che se si utilizza un metodo basato su grep()
o grepl()
, è necessario impostare pattern="^foo$"
piuttosto che "foo"
, se non si desidera che anche le colonne con nomi come "fool"
e "buffoon"
(cioè quelli che contengono foo
come sottostringa) vengano abbinate e rimosse.)
Opzioni meno sicure, va bene per l'uso interattivo:
Anche i prossimi due modi di dire funzioneranno - se df3
contiene una corrispondenza di colonna"foo"
- ma in caso contrario falliranno in modo probabilmente inaspettato. Se, ad esempio, ne usi uno qualsiasi per cercare la colonna inesistente "bar"
, finirai con una data.table a riga zero.
Di conseguenza, sono davvero più adatti per un uso interattivo in cui si potrebbe, ad esempio, voler visualizzare un data.table meno tutte le colonne con nomi contenenti la sottostringa "foo"
. Ai fini della programmazione (o se si desidera rimuovere effettivamente le colonne df3
piuttosto che da una sua copia), i metodi 1, 2a e 2b sono davvero le migliori opzioni.
# Method 4:
df3[, .SD, .SDcols = !patterns("^foo$")]
Infine, ci sono approcci che utilizzano with=FALSE
, anche se data.table
si sta gradualmente allontanando dall'uso di questo argomento, quindi ora è scoraggiato dove è possibile evitarlo; mostrando qui in modo da sapere che esiste l'opzione nel caso in cui ne abbiate davvero bisogno:
# 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
invece didf3
...