R按标签引用数据框列以删除它们

时间:2013-04-08 06:11:07

标签: r dataframe subset

我认为这是一个简单的问题,尽管我的搜索工作毫无结果 -

给定的

z=data.frame(X.39=rnorm(20),X.40=rnorm(20),X.51=rnorm(20))

子集化操作

z[,c('X.39','X.51')]

的工作原理。但是

z[,-c('X.39','X.51')]

给了我

Error in -c("X.39", "X.51") : invalid argument to unary operator

为什么会这样,如何使用列名列表删除一组列?

修改

我知道我总是可以使用

z[,!names(z) %in% c('X.39','X.51')]

但我正在寻找更懒惰的解决方案

EDIT2

大多数讨论都在评论部分,但为了良好的顺序关闭这个,其中的要点是一个更懒惰的解决方案(通过名称直接引用)是不可能的。这似乎是在设计中的。

1 个答案:

答案 0 :(得分:2)

你可以使用setdiff函数,但我不能说它是否是最优雅的解决方案:

z[, setdiff(names(z), c('X.39','X.51'))]