【发布时间】:2019-12-15 08:02:47
【问题描述】:
我有一个为某些工作类别命名的列表列表,每个嵌套列表都是该工作类别的关键字列表,我正在尝试检查数据框中的一个列,其中包含一个职位列表,以查看是否关键字在职位名称中。最终目标是尽可能对每项工作进行分类。我提供了一个数据样本,因为有超过 15,000 个职位和 25 个不同的职位类别需要检查。
这是在 Rstudio 中。我尝试将 lapply 与 str_detect 一起使用。以下是我使用的代码。
library(stringr)
cat.keys <- list(Internship='Intern',
Information.Technology=c('IT', 'Information Technology', 'Software', 'Developer'),
Healthcare=c('RN', 'LPN', 'Doctor', 'Nurse'),
Maintenance=c('Custodian', 'Janitor'))
jobs.df <- data.frame(Company=c('Big Brothers Big Sisters', 'Big Brothers Big Sisters',
'Big Brothers Big Sisters', 'American Red Cross', 'American Red Cross',
'American Red Cross', 'DeMolay International', 'Legal Aid Association',
'St.Mary’s Church'),
Job.Title = c('Intern', 'Marketing Intern', 'Special Events Internship Program',
'RN', 'Nurse', 'Registered Nurse', 'Director of IT - DeMolay International',
'SWITCHBOARD/INTAKE SPECIALIST', 'CHURCH CUSTODIAN - part-time'))
lapply(jobs.df$Job.Title,
function(x) sapply(cat.keys, function(y) str_detect(x, fixed(y))))
我希望它返回一个与我的原始 cat.keys 列表长度相同但具有 TRUE/FALSE 值的列表列表,这就是它返回的值。这完成了我想要的大部分工作,但是我遇到的问题是,当在一个较长的单词中找到一个较短的单词时(例如,“intern”也出现在“international”中,它会将“国际大使”之类的东西归类为实习或 SWITCHBOARD 将返回它)。 IT 示例的问题还在于我正在寻找完全匹配的案例,但是如果职位名称的大小写不同,例如“实习生”而不是“实习生”,则不会匹配,但是如果我这样做了它忽略了大写,RN的问题出现在小写的rn出现在'Intern'中。
【问题讨论】:
标签: r regex string dictionary regex-lookarounds