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

Jes*_*sse 8 r dataframe

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

我经常这样做:

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

哪个工作正常.

但我希望能够以更清洁的方式使用subset.但它似乎附加了data.frame,然后将列名称作为变量而不是字符串来访问.

例如,这是我希望能够做到的:

subset(mtcars,select=-to.remove)
Run Code Online (Sandbox Code Playgroud)

有没有办法强制subsetselect语句中使用字符串向量?还是有另一个更好的选择吗?

jor*_*ran 26

我可能会这样做:

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

(我%ni%经常使用它,所以我已将它内置到我的.Rprofile中.)

  • +1,`Negate`看起来像一个非常有用的隐藏宝石,就像`%ni%`一样.你的下一个任务是用鲱鱼砍掉森林里最强大的树! (3认同)

phi*_*ams 5

你当然可以使用select,但你必须传递名字,而不是字符.所以这将有效:

subset( mtcars, select = -c(hp, drat, wt, qsec) )
Run Code Online (Sandbox Code Playgroud)

  • 我想创建一个名称向量并发送到 select。但这不起作用: (2认同)