2012-07-19 77 views
3

可能重复:
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 

回答

3

尝试:

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

还有一个更简单的方法,将其设置为NULL,但它是在重复的问题(见上文)讨论。 – 2012-07-19 16:24:11

3

您可以设置列设置为空

> 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 
+0

您能否将您的答案添加到我链接的问题中,以便质量答案不会分散在多个问题中? – 2012-07-19 16:44:23