是否有更好的方法从数据框中按名称删除列而不是以下内容?
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
答案 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
...