我经常需要从data.frame中删除列列表。
我通常这样做:
to.remove <- c("hp","drat","wt","qsec")
mtcars[,-which(names(mtcars) %in% to.remove)]
工作正常。
但我希望能够使用subset
以更清洁的方式做到这一点。但它似乎附加了data.frame,然后将列名称作为变量而不是字符串来访问。
例如,我希望能够做到这一点:
subset(mtcars,select=-to.remove)
有没有办法强制subset
在select
语句中使用字符串向量?还是有另一个更好的选择吗?
答案 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) )