В R, как вы извлекаете несколько совпадающих терминов в виде строки и совпадают, если TRUE с Regex или Grep? - PullRequest
0 голосов
/ 03 января 2019

Я все еще новичок в R. Мне нужна помощь с кодом, который ищет вектор для терминов в списке и возвращает TRUE. Если TRUE, вернуть строку соответствующих терминов.

У меня установлено, чтобы сообщить мне, совпадают ли термины, и вернуть первый соответствующий термин, но я не уверен, как получить остальные совпадающие термины.

В прикрепленном коде у меня есть Desired_Output и несовершенный Final_Output.

#create dataset of 2 columns/vectors. 1st column is "Job Title", 2nd column is "Work Experience"
'Work Experience' <- c("cooked food; cleaned house; made beds", "analyzed data; identified gaps; used sql, python, and r", "used tableau to make dashboards for clients; applied advanced macro excel functions", "financial planning and strategy; consulted with leaders and clients")
'Job Title' <- c("dad", "research analyst", "business intelligence consultant", "finance consultant")
Job_Hist   <- data.frame(`Job Title`, `Work Experience`)

#create list of terms to search for in Job_Hist
Term_List <- c("python", " r", "sql", "tableau", "excel")

#use grepl to search the Work Experience vector for terms in CS_Term_List THEN return TRUE or FALSE
Term_TF<- grepl(paste(Term_List, collapse = '|'),Job_Hist$Work.Experience)

#add a new column to our final output dataframe that shows if the job experience matched our terms  
Final_Output<-Job_Hist
Final_Output$Term_Test <- Term_TF


#Let's see what what terms caused the TRUE Flag in the Final_Output
m<-regexpr(paste(Term_List, collapse = '|'),
       Job_Hist$Work.Experience, perl=TRUE)
T_Match <- regmatches(Job_Hist$Work.Experience,m)



#Compare Final_Output to my Desired_Output and please help me :)
Desired_T_Match <- c("NA", "sql, python, r", "tableau, excel", "NA")
Desired_Output <- data.frame(`Job Title`, `Work Experience`, Term_TF, Desired_T_Match)

#I need 2 things. 
 #1) a way to tie T_Match back to Final_Output... something like if, TRUE then match
 #2) a way to return every term matched in a coma delimited string. Example: research analyst   analyzed data...    TRUE    sql, python

1 Ответ

0 голосов
/ 03 января 2019

Вы можете использовать stringr::str_extract_all, чтобы получить список совпадений из каждой строки:

library(stringr)
library(tidyverse)

Job_Hist$matches <- str_extract_all(Job_Hist$Work.Experience, 
  paste(Term_List, collapse = '|'), simplify = TRUE)

                                                                      Work.Experience  Term matches.1 matches.2
1                                               cooked food; cleaned house; made beds FALSE                    
2                             analyzed data; identified gaps; used sql, python, and r  TRUE       sql    python
3 used tableau to make dashboards for clients; applied advanced macro excel functions  TRUE   tableau     excel
4                 financial planning and strategy; consulted with leaders and clients FALSE                    
  matches.3
1          
2         r
3          
4       

Редактировать: , если вы хотите, чтобы совпадения в одном столбце были разделены запятойСтрока, вы можете использовать:

str_extract_all(Job_Hist$Work.Experience, paste(Term_List, collapse = '|')) %>% 
  sapply(., paste, collapse = ", ")

           matches
1                
2 sql, python,  r
3  tableau, excel
4                

Обратите внимание, что если вы используете аргумент по умолчанию simplify = FALSE в str_extract_all, ваш столбец matches будет выглядеть правильно, как результат, который мы получаем с sapply выше,Однако, если вы проверите с помощью str(), вы увидите, что каждый элемент фактически является собственным списком, что вызовет проблемы для некоторых типов анализа.

...