1. ホーム
  2. r

[解決済み] データフレーム内の列を名前でドロップする方法

2022-03-16 08:19:19

質問

大きなデータセットがあり、特定の列を読むか、他の列をすべて削除したいのですが。

data <- read.dta("file.dta")

興味のない列を選択しています。

var.out <- names(data)[!names(data) %in% c("iden", "name", "x_serv", "m_serv")]

というようなことをしたいと思います。

for(i in 1:length(var.out)) {
   paste("data$", var.out[i], sep="") <- NULL
}

で不要な列をすべて削除します。これが最適解なのでしょうか?

どのように解決するのですか?

インデックスを作成するか subset 関数を使用します。例えば.

R> df <- data.frame(x=1:5, y=2:6, z=3:7, u=4:8)
R> df
  x y z u
1 1 2 3 4
2 2 3 4 5
3 3 4 5 6
4 4 5 6 7
5 5 6 7 8

そうすると which 関数と - 演算子を使用することで、列のインデックスを作成できます。

R> df[ , -which(names(df) %in% c("z","u"))]
  x y
1 1 2
2 2 3
3 3 4
4 4 5
5 5 6

あるいは、もっとシンプルに select の引数を指定します。 subset 関数を使うことができます。 - 演算子を直接カラム名のベクトルに適用することもできますし、カラム名を囲む引用符を省略することもできます!

R> subset(df, select=-c(z,u))
  x y
1 1 2
2 2 3
3 3 4
4 4 5
5 5 6

他の列を削除する代わりに、必要な列を選択することもできることに注意してください。

R> df[ , c("x","y")]
  x y
1 1 2
2 2 3
3 3 4
4 4 5
5 5 6

R> subset(df, select=c(x,y))
  x y
1 1 2
2 2 3
3 3 4
4 4 5
5 5 6