6

可能重复:
从 R 中的 data.frame 中删除整个列

有没有比以下更好的方法从数据框中按名称删除列?

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
4

2 回答 2

6

您可以将列设置为 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
于 2012-07-19T16:22:34.973 回答
3

尝试:

Orange[-match("age",names(Orange))]
   Tree circumference
1     1            30
2     1            58
3     1            87
4     1           115
...
于 2012-07-19T16:21:17.690 回答