Фильтрация нескольких столбцов с помощью str_detect - PullRequest
1 голос
/ 02 апреля 2019

Я использую функцию str_detect от tidyverse, чтобы отфильтровать строки фрейма данных, которые соответствуют началу любой строки из списка.В настоящее время используется оператор | при фильтрации между каждым столбцом в моем операторе filter.Есть ли способ использовать str_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)

Ответы [ 2 ]

3 голосов
/ 02 апреля 2019

Вы можете использовать filter_at:

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

Если вы хотите применить фильтр ко всем переменным, вы можете использовать filter_all

0 голосов
/ 02 апреля 2019

Я бы сначала преобразовал это в длинные данные, а затем использовал str_detect()

DF <- Dataframe %>% mutate(ID = row_number())
Index <- DF %>% gather(key, value, -ID) %>% filter(str_detect(value, Filter_list))
DF %>% filter(ID %in% unique(Index$ID))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...