Qualquer uma das seguintes foo
opções removerá a coluna 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 também suporta a seguinte sintaxe:
## Method 3 (could then assign to df3,
df3[, !"foo"]
no entanto, se você realmente deseja remover a coluna "foo"
de df3
(em vez de apenas imprimir uma exibição da df3
coluna de menos "foo"
), realmente deseja usar o Método 1.
(Observe que, se você usar um método baseado em grep()
ou grepl()
, precisará definir, em pattern="^foo$"
vez de "foo"
, se não desejar que colunas com nomes como "fool"
e "buffoon"
(ou seja, aquelas que contenham foo
como substring) sejam correspondidas e removidas.)
Opções menos seguras, ótimas para uso interativo:
Os próximos dois idiomas também funcionarão - se df3
contiverem uma correspondência de coluna"foo"
- mas falharão de uma maneira provavelmente inesperada se não existirem. Se, por exemplo, você usar algum deles para procurar a coluna inexistente "bar"
, você terminará com uma tabela de dados com linha zero.
Como conseqüência, eles são realmente mais adequados para uso interativo, onde se pode, por exemplo, querer exibir uma tabela de dados menos quaisquer colunas com nomes contendo a substring "foo"
. Para fins de programação (ou se você realmente deseja remover as colunas df3
de uma cópia), os Métodos 1, 2a e 2b são realmente as melhores opções.
# Method 4:
df3[, .SD, .SDcols = !patterns("^foo$")]
Por fim, existem abordagens usando with=FALSE
, embora data.table
esteja gradualmente se afastando do uso desse argumento, por isso agora é desencorajado onde você pode evitá-lo; mostrando aqui para que você saiba que a opção existe, caso você realmente precise:
# 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
em vez dedf3
...