使用子集从data.frame中删除列列表

使用子集从data.frame中删除列列表,r,dataframe,R,Dataframe,我经常需要从data.frame中删除列列表 我通常这样做: to.remove <- c("hp","drat","wt","qsec") mtcars[,-which(names(mtcars) %in% to.remove)] 有没有办法强制子集在select语句中使用字符串向量?或者还有其他更好的选择吗?我可能会这样做: to.remove <- c("hp","drat","wt","qsec") `%ni%` <- Negate(`%in%`) subset(mt

我经常需要从data.frame中删除列列表

我通常这样做:

to.remove <- c("hp","drat","wt","qsec")
mtcars[,-which(names(mtcars) %in% to.remove)]

有没有办法强制
子集
select
语句中使用字符串向量?或者还有其他更好的选择吗?

我可能会这样做:

to.remove <- c("hp","drat","wt","qsec")
`%ni%` <- Negate(`%in%`)
subset(mtcars,select = names(mtcars) %ni% to.remove)

to.remove您当然可以使用select,但必须传入名称,而不是字符。因此,这将起作用:

subset( mtcars, select = -c(hp, drat, wt, qsec) )

很好地使用了用negate创建的二进制运算符+1@TylerRinker我再也记不起我是从哪里学来这个函数的了。一定是这样或是r-help。了解否定很酷。我很少在
funprog
中使用东西,这是一个很好的用法。+1,
Negate
看起来像是一个非常有用的隐藏宝石,
%ni%
。你的下一个任务是用…砍倒森林中最强壮的树。。。鲱鱼!为了完整起见,您还可以使用
操作符就像:
mtcars[,!(名称(mtcars)%in%to.remove)]
我想创建一个名称向量并发送到select。但这不起作用:
subset( mtcars, select = -c(hp, drat, wt, qsec) )