[解決済み】data.tableで名前を指定してカラムを削除する方法は?
質問
の中の "foo"という名前のカラムを削除するには、次のようにします。
data.frame
,できる。
df <- df[-grep('foo', colnames(df))]
しかし、一旦
df
が変換され
data.table
オブジェクトを使用する場合、カラムを削除することはできません。
例
df <- data.frame(id = 1:100, foo = rnorm(100))
df2 <- df[-grep('foo', colnames(df))] # works
df3 <- data.table(df)
df3[-grep('foo', colnames(df3))]
しかし、一度変換されたものを
data.table
オブジェクトを使用する場合、これはもう機能しません。
解決方法は?
以下のいずれかを実行すると、カラムが削除されます。
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"
となると、0行のdata.tableになってしまいます。
その結果、これらはインタラクティブな使用に最も適しており、例えば、data.tableから、部分文字列
"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]
関連
-
[解決済み】"置換する項目数が置換長の倍数でない "と表示されるのはなぜですか?
-
[解決済み】エラー:私のコードで予期しないシンボル/入力/文字列定数/数値定数/SPECIALが発生した
-
[解決済み】添え字付き代入でNAを使用することはできません
-
[解決済み】Rのメモリ管理/サイズn Mbのベクトルを割り当てられない
-
[解決済み] lmer エラー: グループ化係数は観測数未満でなければならない
-
[解決済み】Rで文字ベクトルから引用符を削除する
-
[解決済み】ggplot2でのプロット:「Error: カテゴリ軸のY軸に "Discrete value supplied to continuous scale "と表示される。
-
[解決済み] Rの再現性のある優れた例題の作り方
-
[解決済み] 先頭と末尾の空白を削除するにはどうしたらよいですか?
-
[解決済み】data.table vs dplyr:一方がうまくできない、またはうまくできないことを行うことができますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】model.frame.defaultでのエラー:変数の長さが異なる
-
[解決済み】ggplotの線幅を変更するには?
-
[解決済み】rbind エラー。"名前が以前の名前と一致しない"
-
[解決済み】GLM解析での警告
-
[解決済み】Rのメモリ管理/サイズn Mbのベクトルを割り当てられない
-
[解決済み] lmer エラー: グループ化係数は観測数未満でなければならない
-
[解決済み】RでAIC中に行数が変化するのはなぜですか?そうならないようにするにはどうしたらいいですか?
-
[解決済み】r Error dim(X) must have a positive length?
-
[解決済み】二項演算子への非数値引数【非公開
-
[解決済み] データフレーム列の名前によるドロップ