Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

r - Filtering multiple columns with str_detect

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)
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...