r-一元运算符的参数无效-错误消息-负dplyr::select with vector



我一直在使用向量对数据帧进行正子集,它运行得很好。现在我想使用相同的向量来对数据帧进行负子集处理。

我收到一条错误消息(一元运算符的无效参数(,但在谷歌上搜索后,我仍然不明白它的意思。

谢谢你的帮助!

# Starting point 
df_main <- data.frame(coat=c(1:5),hanger=c(1:5),book=c(1:5),dvd=c(1:5),bookcase=c(1:5),
clock=c(1:5),bottle=c(1:5),curtains=c(1:5),wall=c(1:5))
df_keep <- data.frame(keep_var=c("coat","hanger","book","wall","bottle"),othvar=c("r","w","r","w",NA))

# Vector
library(dplyr)
keep.vec <- as.character(
(df_keep %>% dplyr::filter(is.na(othvar) | othvar == 'r'))$keep_var
)

# Attempts at using vector for negative subsetting 
df_main %>% dplyr::select(-keep.vec)
df_main[-keep.vec, ] 

我们可以在tidyselect中用辅助函数one_of包装它

df_main %>%
select(-one_of(keep.vec))
#  hanger dvd bookcase clock curtains wall
#1      1   1        1     1        1    1
#2      2   2        2     2        2    2
#3      3   3        3     3        3    3
#4      4   4        4     4        4    4
#5      5   5        5     5        5    5

或者另一个选项是setdiff

df_main %>%
select(setdiff(names(.), keep.vec))

它也将在tidyverse之外工作

df_main[setdiff(names(df_main), keep.vec)]

最新更新