【发布时间】:2013-03-30 03:19:52
【问题描述】:
虽然我的搜索毫无结果,但我想这很容易——
给定
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
大部分讨论都在评论部分,但为了保持良好的秩序而关闭它,其要点是不可能使用更懒惰的解决方案(按名称直接引用)。这似乎是设计的。
【问题讨论】:
-
使用
z[, !names(z) %in% c('X.39, 'X.51'), drop = FALSE]。drop=FALSE是为了确保您返回data.frame,即使结果 子集后 只是一列。默认情况下,如果结果为 1 列,则返回一个向量。 -
-which不推荐使用,如this answer 所示。 -
这个:removing a list of columns from a data.frame using subset(尽管有子集,但答案在这里有效)
-
@TahnoonPasha,试试:
df <- data.frame(x=1:5, y=6:10);df[, +c("x")]