Drop(或否定选择)由DPRIR中字符串向量表示的多个变量

Drop(或否定选择)由DPRIR中字符串向量表示的多个变量,r,dplyr,R,Dplyr,我的数据框架如下 df=data.frame(a=c(1:10),b=c(2:11),c=c(2:13)) 用户将变量名向量指定为字符 user\u cols=c('a','b') 我想获取向量并使用select()保持向量引用的变量。下面的代码可以工作 df2 = df %>% select(!!!syms(user_cols)) 但是,如果我想删除这些变量而不是保留这些变量,那么直接向语法中添加否定(-)将不起作用: df2 = df %>% select(-!!!sy

我的数据框架如下

df=data.frame(a=c(1:10),b=c(2:11),c=c(2:13))

用户将变量名向量指定为字符

user\u cols=c('a','b')

我想获取向量并使用select()保持向量引用的变量。下面的代码可以工作

df2 = df %>%
  select(!!!syms(user_cols))
但是,如果我想删除这些变量而不是保留这些变量,那么直接向语法中添加否定(-)将不起作用:

df2 = df %>%
  select(-!!!syms(user_cols)) #Adding negation '-' hoping to de-select

在dplyr中是否有实现此删除操作的好方法?

只需使用对象选择列即可

library(dplyr)
df %>%
      select(user_cols)
如果需要,在新版本的
dplyr
中,我们可以使用
all\u of

df %>%
   select(all_of(user_cols))
#    a  b
#1   1  2
#2   2  3
#3   3  4
#4   4  5
#5   5  6
#6   6  7
#7   7  8
#8   8  9
#9   9 10
#10 10 11
还是放弃

df %>% 
   select(-all_of(user_cols))
#    c
#1   3
#2   4
#3   5
#4   6
#5   7
#6   8
#7   9
#8  10
#9  11
#10 12
注意:我们可以直接使用它,不需要任何其他功能


如果我们想使用OP的代码,只需使用
c

df %>%
   select(-c(!!!syms(user_cols)))
#    c
#1   3
#2   4
#3   5
#4   6
#5   7
#6   8
#7   9
#8  10
#9  11
#10 12

您可以使用
setdiff

df[setdiff(names(df), user_cols)]
要与dplyr一起使用,
选择:

library(dplyr)
df %>% select(setdiff(names(.), user_cols))

#    c
#1   2
#2   3
#3   4
#4   5
#5   6
#6   7
#7   8
#8   9
#9  10
#10 11