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

时间:2012-03-23 20:12:31

标签: r dataframe

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

我通常这样做:

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

工作正常。

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

例如,我希望能够做到这一点:

subset(mtcars,select=-to.remove)

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

2 个答案:

答案 0 :(得分:23)

我可能会这样做:

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

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

答案 1 :(得分:5)

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

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