2012-07-19 63 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