データフレームで名前によって列を削除する方法 質問する

データフレームで名前によって列を削除する方法 質問する

大規模なデータ セットがあり、特定の列を読み取ったり、他のすべての列を削除したりしたいと考えています。

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
}

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

ベストアンサー1

インデックスまたは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

おすすめ記事