次のいずれかを実行するとfoo
、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は、次の構文もサポートしています。
## Method 3 (could then assign to df3,
df3[, !"foo"]
ただし"foo"
、df3
(df3
マイナス列のビューを印刷するだけではなく)実際に列を削除したい場合は、"foo"
代わりに方法1を使用します。
(grep()
またはgrepl()
に依存するメソッドを使用するpattern="^foo$"
場合"foo"
、"fool"
およびなどの名前の列"buffoon"
(つまりfoo
、部分文字列として含む列)も一致させて削除しない場合は、ではなくを設定する必要があることに注意してください。)
安全性の低いオプション、インタラクティブな使用には問題ありません:
次の2つのイディオムも(列の一致が含まれている場合)機能しdf3
ますが、一致"foo"
しない場合はおそらく予期しない方法で失敗します。たとえば、それらのいずれかを使用して存在しない列を検索"bar"
すると、行がゼロのdata.tableになります。
結果として、それらは、たとえば、data.tableからsubstringを含む名前の列を差し引いて表示したいようなインタラクティブな使用に本当に最適です"foo"
。プログラミングの目的で(または列df3
のコピーからではなく実際に列を削除する場合)、メソッド1、2a、および2bが実際に最適なオプションです。
# Method 4:
df3[, .SD, .SDcols = !patterns("^foo$")]
最後に、を使用するアプローチがありますがwith=FALSE
、data.table
この引数の使用から徐々に移行しているため、これを回避できる場所では推奨されません。ここに表示すると、本当に必要な場合に備えてオプションが存在することがわかります。
# 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
代わりにdata.tableという名前を付けたほうが明確だったでしょうdf3