使用str_detect筛选多个列
我正在利用tidyverse中的函数使用str_detect筛选多个列,r,R,我正在利用tidyverse中的函数str\u detect,过滤掉数据帧中与列表中任何字符串开头匹配的行。目前,在我的过滤器语句中的每一列之间进行过滤时,使用|语句。有没有办法在不使用or语句的情况下跨多个列使用str\u detect?下面我正在使用的代码可以工作,但不能扩展 Dataframe <- data.frame("names" = c('John','Jill','Joe','Mark'), "Jobs" = c('Mailman','Jockey','Jobhunter
str\u detect
,过滤掉数据帧中与列表中任何字符串开头匹配的行。目前,在我的过滤器语句中的每一列之间进行过滤时,使用|语句。有没有办法在不使用or语句的情况下跨多个列使用str\u detect
?下面我正在使用的代码可以工作,但不能扩展
Dataframe <- data.frame("names" = c('John','Jill','Joe','Mark'), "Jobs" = c('Mailman','Jockey','Jobhunter',"Nojob"))
Filter_list <- c('Jo')
Dataframe %>% filter(str_detect(names, paste0("^(", paste(Filter_list, collapse = "|"), ")")) |
str_detect(Jobs, paste0("^(", paste(Filter_list, collapse = "|"), ")"))
names Jobs
1 John Mailman
2 Jill Jockey
3 Joe Jobhunter)
Dataframe我会先将其转换为长数据,然后使用str\u detect()
DF%变异(ID=row\u number())
索引%gather(键,值,-ID)%%>%过滤器(str\u detect(值,过滤器列表))
DF%>%筛选器(ID%在%unique中(索引$ID))
您可以在以下位置使用过滤器:
Dataframe %>% filter_at(.vars = vars(names, Jobs),
.vars_predicate = any_vars(str_detect(. , paste0("^(", paste(Filter_list, collapse = "|"), ")"))))
如果要将筛选器应用于所有变量,则可以使用filter\u all
Dataframe %>% filter_at(.vars = vars(names, Jobs),
.vars_predicate = any_vars(str_detect(. , paste0("^(", paste(Filter_list, collapse = "|"), ")"))))