Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Filtering multiple columns with str_detect

Tags:

r

I'm utilizing the function str_detect from tidyverse to filter out rows of a data frame that match the start of any string from a list. Currently, utilizing | statement when filtering between each column within my filter statement. Is there any way to utilize str_detect across multiple columns without using or statements? The code I'm currently using below works, but does not scale.


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)
like image 246
Jenks Avatar asked Oct 22 '25 15:10

Jenks


1 Answers

You can use filter_at:

Dataframe %>% filter_at(.vars = vars(names, Jobs),
                    .vars_predicate = any_vars(str_detect(. , paste0("^(", paste(Filter_list, collapse = "|"), ")"))))

If you want to apply the filter to all varaibles then you can use filter_all

like image 78
domaeg Avatar answered Oct 24 '25 05:10

domaeg



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!