R部分字符串匹配和返回值(在R中) [英] R partial string matching and return value (in R)

查看:20
本文介绍了R部分字符串匹配和返回值(在R中)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有多个采购数据库,我需要在这些数据库上运行我构建的用于识别某些产品的"关键字"列表,如果匹配,我希望将这些产品标记为外科类别。

这里有一个例子。

采购数据库(其实我有200多万行要查):

d<-data.frame(prod_desc=c("BANDELETTE TVTO-OBTRYX HALO", "BANDELETTE MINI ARC PRECISES", "BANDELETTE D'ANALYSE POUR GLYCEMIE", "DIACH. BANDELETTE STER 19MM X 72MM","SLING MALE SYSTEM","DIACHILON","AIGUILLE","GANT","LABEL","CRAYON"),label=1:10)

关键字和返回值列表(实际列表更长):

kw<-data.frame(kw=c("bandelette","tvt","bande transvaginale","sling system","argus"),category="ss_bandelette")

我希望找到包含我的关键字字符串kw的产品prod_desc,如果匹配,我希望在d数据框中添加一个列,该列将返回与kw数据框中的kw相关联的category

目前,我能够使用以下代码获得预期结果:

d$match <- ifelse(d$cat <- grepl(paste(kw$kw,collapse="|"), d$name,ignore.case = TRUE) == "TRUE","SS_Bandelette","-")

但这段代码的效率并不高,因为我有大约350个关键字,它们映射到大约30个不同的类别。如果触发我的某个关键字,我可以使用什么代码自动返回d数据框中的类别?

非常感谢您的帮助。

菲尔

推荐答案

# made all to lowercase
d$prod_desc <- tolower(d$prod_desc)
# create a logical matrix that specifies which keywords are present on each row of 'd'
m = data.frame(sapply(kw$kw, grepl, d$prod_desc))
colnames(m) = kw$kw

# create a column in 'd' with the corresponding keyword      
d$kw <- apply(m, 1, function(x) names(x)[which(x)[1]])
# simple merge
merge(d, kw, by = "kw", all.x = T)

#           kw                          prod_desc label      category
#1  bandelette bandelette d'analyse pour glycemie     3 ss_bandelette
#2  bandelette diach. bandelette ster 19mm x 72mm     4 ss_bandelette
#3  bandelette        bandelette tvto-obtryx halo     1 ss_bandelette
#4  bandelette       bandelette mini arc precises     2 ss_bandelette
#5        <NA>                  sling male system     5          <NA>
#6        <NA>                          diachilon     6          <NA>
#7        <NA>                           aiguille     7          <NA>
#8        <NA>                               gant     8          <NA>
#9        <NA>                              label     9          <NA>
#10       <NA>                             crayon    10          <NA>

这篇关于R部分字符串匹配和返回值(在R中)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆