如何删除r dataframe中的多个列?

如何删除r dataframe中的多个列?,r,dataframe,subset,R,Dataframe,Subset,我试图删除数据帧中的一些列。 我想知道为什么它适用于单个列,而不适用于多个列 例如 这很有效 album2[,5]<- NULL album2[,5]基本子集: album2 <- album2[, -5] #delete column 5 album2 <- album2[, -c(5:7)] # delete columns 5 through 7 album2如果只想删除第5列和第7列,而不想删除第6列,请尝试: album2 <- album2[,-c(5,7

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

album2[,5]<- NULL
album2[,5]基本子集:

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

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

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

album2添加答案,因为这是搜索“在r中删除多个列”时最热门的内容:


单列删除的一般版本,例如
df$column1@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]
test\u df这对我很有用

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

x下一行将从数据帧“data”中删除col_1和col_2

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

前几天我在@JoachimSchork的博客《全球统计》中读到了一个有趣的解决方案。可以按列名删除列。你可以找到更多

库(data.table)
mtcars2机头(mtcars2)
drat wt qsec与am齿轮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

试试
album2[,5:7]如果你能提供一个最小的可重复的例子来回答你的问题,那就太好了。我们可以利用它来向您展示如何回答您的问题。这样,其他人也可以在将来适合你的问题和相应的答案。您可以看看如何在R中创建一个很好的可复制示例。@EricFail,尤其是据我所知,第一个示例“例如,此功能”实际上不起作用。@doctorG使用“list(NULL)”使其可用于多个列,在单个列中使用NULL有效。我将在将来考虑再现性。请参阅。不建议按列位置删除列,至少对我来说是这样。是和否。OP是在指定列位置的上下文中提出的。如果您知道所需的位置,那么这很好。为了让其他人知道你的评论是否有用/与他们相关,你能补充一下为什么不推荐它吗?好吧,如果一个人在他/她的数据中添加了一个新的列,那么列位置会发生变化吗?我同意你的答案是正确的,但这既不安全也不高效。这意味着你已经知道你想要的列号了。达到这一点取决于你。考虑您是以交互方式还是以编程方式进行操作(以及您需要处理的条件)也取决于您。请您解释一下为什么
list(NULL)
,而不仅仅是
NULL
?drop在这种情况下做什么?
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]
x <-dplyr::select(dataset_df, -c('column1', 'column2'))
data[!(colnames(data) %in% c('col_1','col_2'))]
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