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