我正在尝试删除数据框中的某些列。 我想知道为什么它适用于单个列但不适用于多列 例如 这工作
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
答案 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