按名称从数据框中删除列

时间:2012-07-19 16:18:23

标签: r dataframe

  

可能重复:
  remove an entire column from a data.frame in R

是否有更好的方法从数据框中按名称删除列而不是以下内容?

Orange[colnames(Orange) != "Age"]

我尝试过以下操作并收到错误:

> Orange[-"Age"]
Error in -"age" : invalid argument to unary operator
> Orange[,-"Age"]
Error in -"age" : invalid argument to unary operator
> Orange[[,-"Age"]]
Error in -"age" : invalid argument to unary operator

2 个答案:

答案 0 :(得分:5)

您可以将列设置为NULL

> dat <- data.frame(a = 1, b = 1, c = 1)
> dat
  a b c
1 1 1 1
> dat$a <- NULL
> dat
  b c
1 1 1
> dat["b"] <- NULL
> dat
  c
1 1

有人会出现并指出data.frame会制作大量数据副本来完成这项简单的任务。当数据变大(数百万行)时,这将花费大量时间,并且可能由于内存限制而无法工作。如果这是一个问题,请使用data.table:=运算符:

library(data.table)
> dt <- data.table(a = 1, b = 1, c = 1)
> dt[,a:=NULL]
     b c
[1,] 1 1

答案 1 :(得分:3)

尝试:

Orange[-match("age",names(Orange))]
   Tree circumference
1     1            30
2     1            58
3     1            87
4     1           115
...