Salah satu dari yang berikut ini akan menghapus kolom foo
dari tabel data 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 juga mendukung sintaks berikut:
## Method 3 (could then assign to df3,
df3[, !"foo"]
meskipun jika Anda benar-benar ingin menghapus kolom "foo"
dari df3
(bukan hanya mencetak tampilan df3
kolom minus "foo"
) Anda benar-benar ingin menggunakan Metode 1 sebagai gantinya.
(Perhatikan bahwa jika Anda menggunakan metode yang mengandalkan grep()
atau grepl()
, Anda perlu mengatur pattern="^foo$"
daripada "foo"
, jika Anda tidak ingin kolom dengan nama seperti "fool"
dan "buffoon"
(yaitu yang mengandung foo
sebagai substring) juga dicocokkan dan dihapus.)
Opsi yang kurang aman, baik untuk penggunaan interaktif:
Dua idiom berikutnya juga akan berfungsi - jika df3
berisi kolom yang cocok"foo"
- tetapi akan gagal dengan cara yang mungkin tidak terduga jika tidak. Jika, misalnya, Anda menggunakan salah satu dari mereka untuk mencari kolom yang tidak ada "bar"
, Anda akan berakhir dengan tabel data baris-nol.
Sebagai konsekuensinya, mereka benar-benar paling cocok untuk penggunaan interaktif di mana orang mungkin, misalnya, ingin menampilkan data "foo"
. Untuk tujuan pemrograman (atau jika Anda ingin benar-benar menghapus kolom dari df3
daripada dari salinannya), Metode 1, 2a, dan 2b benar-benar merupakan pilihan terbaik.
# Method 4:
df3[, .SD, .SDcols = !patterns("^foo$")]
Terakhir ada pendekatan menggunakan with=FALSE
, meskipun data.table
secara bertahap menjauh dari menggunakan argumen ini sehingga sekarang tidak disarankan di mana Anda bisa menghindarinya; ditampilkan di sini sehingga Anda tahu opsi ada jika Anda benar-benar membutuhkannya:
# 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
bukannyadf3
...