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

时间:2016-01-05 17:36:01

标签: r dataframe subset

我正在尝试删除数据框中的某些列。 我想知道为什么它适用于单个列但不适用于多列 例如 这工作

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

7 个答案:

答案 0 :(得分:28)

基本子集:

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

答案 1 :(得分:12)

添加答案,因为这是搜索“在r中放置多列”时的热门选择:

单列删除的一般版本,例如ERRORS:LONG_ERROR_DESCRIPTIONbeef,将使用0xdead

df$column1 <- NULL

这也适用于位置索引:

list(NULL)

这是一个更一般的删除方式,正如一些评论所提到的,不建议按索引删除。加上熟悉的否定子集(用于其他答案)不适用于以字符串形式给出的列:

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:3)

x <-dplyr :: select(dataset_df,-c('coloumn1','column2'))

这对我有用。

答案 4 :(得分:1)

@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

答案 5 :(得分:1)

以下行将从数据框 'data' 中删除 col_1 和 col_2

data[!(colnames(data) %in% c('col_1','col_2'))]

答案 6 :(得分:0)

这是我前几天在@JoachimSchork 的博客 Statistics Globe 中读到的一个有趣的解决方案。您可以按列名删除列。您可以了解更多here

library(data.table)

mtcars2 <- mtcars

setDT(mtcars2)[, c("mpg", "cyl", "disp", "hp") := NULL]

> head(mtcars2)
   drat    wt  qsec vs am gear carb
1: 3.90 2.620 16.46  0  1    4    4
2: 3.90 2.875 17.02  0  1    4    4
3: 3.85 2.320 18.61  1  1    4    1
4: 3.08 3.215 19.44  1  0    3    1
5: 3.15 3.440 17.02  0  0    3    2
6: 2.76 3.460 20.22  1  0    3    1