データフレームの列を名前でドロップする 質問する

データフレームの列を名前でドロップする 質問する

データ フレームから削除したい列がいくつかあります。次のようにして個別に削除できることはわかっています。

df$x <- NULL

しかし、私はこれをより少ないコマンドで実行したいと考えていました。

また、次のように整数インデックスを使用して列を削除できることもわかっています。

df <- df[ -c(1, 3:6, 12) ]

しかし、変数の相対的な位置が変わる可能性があるのではないかと心配しています。

R の強力さを考えると、各列を 1 つずつ削除するよりも良い方法があるかもしれないと考えました。

ベストアンサー1

シンプルな名前のリストを使用できます:

DF <- data.frame(
  x=1:10,
  y=10:1,
  z=rep(5,10),
  a=11:20
)
drops <- c("x","z")
DF[ , !(names(DF) %in% drops)]

または、代わりに、保持するリストを作成し、名前で参照することもできます。

keeps <- c("y", "a")
DF[keeps]

編集: インデックス関数の引数にまだ慣れていない人のためにdrop、1 つの列をデータ フレームとして保持する場合は、次のようにします。

keeps <- "y"
DF[ , keeps, drop = FALSE]

drop=TRUE(または言及しない場合) は不要な次元を削除し、列の値を持つベクトルを返しますy

おすすめ記事