web-dev-qa-db-ja.com

rデータフレームの複数の列を削除する方法は?

データフレーム内のいくつかの列を削除しようとしています。私はなぜそれが単一の列で機能しましたが、複数列の列では機能しなかったのか知りたいですこれは動作します

album2[,5]<- NULL

これは機能しません

album2[,c(5:7)]<- NULL
Error in `[<-.data.frame`(`*tmp*`, , 5:7, value = NULL) : 
replacement has 0 items, need 600

これも機能しません

for (i in 5: (length(album2)-1)){
 album2[,i]<- NULL
}
Error in `[<-.data.frame`(`*tmp*`, , i, value = NULL) : 
new columns would leave holes after existing columns
15
Ahmed Elmahy

基本的なサブセット化:

album2 <- album2[, -5] #delete column 5
album2 <- album2[, -c(5:7)] # delete columns 5 through 7
34
doctorG

「rに複数の列をドロップする」を検索するとき、これが一番のヒットだったので答えを追加します。

単一列の削除の一般的なバージョン、例えば_df$column1 <- NULL_はlist(NULL)を使用することです:

df[ ,c('column1', 'column2')] <- list(NULL)

これは、位置インデックスでも同様に機能します。

df[ ,c(1,2)] <- list(NULL)

これはより一般的なドロップであり、いくつかのコメントが述べたように、インデックスによる削除は推奨されません。さらに、おなじみのネガティブサブセット(他の回答で使用)は、文字列として指定された列では機能しません。

_> iris[ ,-c("Species")]
Error in -"Species" : invalid argument to unary operator
_
17
Andrew Haynes

5列目と7列目のみを削除し、6列目は削除しない場合:

album2 <- album2[,-c(5,7)] #deletes columns 5 and 7
4
Kara

データフレームから削除したい列名のベクトルを取得したら、次の方法で@Ahmed Elmahyが役立ちます。

test_df <- data.frame(col1 = c("a", "b", "c", "d", "e"), col2 = seq(1, 5), col3 = rep(3, 5))
rm_col <- c("col2")
test_df[, !(colnames(test_df) %in% rm_col), drop = FALSE]

よろしくお願いします、Explorer

2
ExploreR