web-dev-qa-db-ja.com

data.tableから複数の列を削除します

Data.tableから複数の列を削除する正しい方法は何ですか?現在、以下のコードを使用していますが、誤って列名の1つを繰り返したときに予期しない動作が発生していました。これがバグなのか、この方法で列を削除すべきではないのかはわかりませんでした。

library(data.table)
DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","y") := NULL]
names(DT)
[1] "z"

上記は正常に動作しますが、

DT <- data.table(x = letters, y = letters, z = letters)
DT[ ,c("x","x") := NULL]
names(DT)
[1] "z"
68
matt_k

これは、堅実で再現可能なバグのように見えます。 Bug#2791 としてファイルされています。

列を繰り返すと、後続の列を削除しようとするようです。
列が残っていない場合、Rはクラッシュします。


[〜#〜] update [〜#〜]:v1.8.11で修正されました。 [〜#〜] news [〜#〜] から:

同じクエリで同じ列に2回割り当てると、状況によってはクラッシュではなくエラーになります。例:DT [、c( "B"、 "B"):= NULL](同じ列を2回参照して削除)。報告してくれたRicardo( #2751 )とmatt_k( #2791 )に感謝します。テストが追加されました。

35
Ricardo Saporta

このQは回答されましたが、これを補足説明と見なします。

複数の列を削除するには、次の構文を使用します

DT[ ,`:=`(x = NULL, y = NULL)]

複数の列(変数)を追加するものと一致するため

DT[ ,`:=`(x = letters, y = "Male")]

これは、重複した列名もチェックします。したがって、xを2回ドロップしようとすると、エラーメッセージがスローされます。

14
Pankil Shah