dplyr:选择除vector中包含的变量之外的所有变量

Shi*_*obe 7 select r dplyr

这应该是一个简单的问题,但我正在努力.

我有一个变量名称向量,我想从数据框中排除:

df <- data.frame(matrix(rexp(50), nrow = 10, ncol = 5))
names(df) <- paste0(rep("variable_", 5), 1:5)

excluded_vars <- c("variable_1", "variable_3")
Run Code Online (Sandbox Code Playgroud)

我原本以为只要在select语句中排除对象-就可以了:

select(df, -excluded_vars)
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

-excluded_vars中的错误:一元运算符的参数无效

使用时也是如此 select_()

有任何想法吗?

C. *_*aun 14

你需要使用这个one_of功能:

select(df, -one_of(excluded_vars))
Run Code Online (Sandbox Code Playgroud)

有关基于变量名称dplyr进行选择的更多信息,请参阅选择帮助程序的文档.

  • 从select的文档中:“请注意,除了:,-和c()之外,所有复杂表达式都在数据框上下文之外求值。” 我认为这意味着`-`符号在`select`中使用时不会评估其参数。对`one_of`的调用将评估您的论点。 (3认同)

Art*_*Yip 11

select(df, -any_of(excluded_vars)) 现在是最安全的方法(如果 df 中不存在的变量名包含在 中,则代码不会中断excluded_vars


Shi*_*obe 9

从 dplyr 的更新版本开始,以下内容现在有效:

select(df, -excluded_vars)
Run Code Online (Sandbox Code Playgroud)


vpz*_*vpz 6

你几乎就-c()在那里,只是在exclude_vars.
像这样:

select(df, -c(excluded_vars))
Run Code Online (Sandbox Code Playgroud)