如何删除r数据帧中的多个列?

Ahm*_*ahy 17 r subset dataframe

我试图删除数据框中的一些列.我想知道为什么它适用于单个列但不适用于多列,例如这是有效的

album2[,5]<- NULL
Run Code Online (Sandbox Code Playgroud)

这不起作用

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

这也行不通

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
Run Code Online (Sandbox Code Playgroud)

doc*_*orG 35

基本子集:

album2 <- album2[, -5] #delete column 5
album2 <- album2[, -c(5:7)] # delete columns 5 through 7
Run Code Online (Sandbox Code Playgroud)

  • 至少对我来说,不建议按其位置放置列。 (3认同)

And*_*nes 20

添加答案,因为这是搜索"在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
Run Code Online (Sandbox Code Playgroud)


小智 9

如果您只想删除第 5 列和第 7 列而不是第 6 列,请尝试:

album2 <- album2[,-c(5,7)] #deletes columns 5 and 7
Run Code Online (Sandbox Code Playgroud)


Exp*_*reR 7

@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]
Run Code Online (Sandbox Code Playgroud)

一切顺利,ExplorerR


小智 6

这对我有用。

x <-dplyr::select(dataset_df, -c('column1', 'column2'))
Run Code Online (Sandbox Code Playgroud)