R 如果模式是字符串,如何查找匹配项?

R 如果模式是字符串,如何查找匹配项?,r,regex,R,Regex,假设我有一个字符串向量: header = c("2012 Chevrolet Camaro SS", "2013 Chevrolet Equinox LT", "2013 Nissan Altima 2.5 SV", "2009 Infiniti M35x X") 还有一份汽车制造商的名单 maker.list = c("Chevrolet", "Nissan", "Infiniti") 我想使用agrep()返回汽车

假设我有一个字符串向量:

header = c("2012 Chevrolet Camaro SS", 
           "2013 Chevrolet Equinox LT", 
           "2013 Nissan Altima 2.5 SV", 
           "2009 Infiniti M35x X")
还有一份汽车制造商的名单

maker.list = c("Chevrolet", "Nissan", "Infiniti")
我想使用agrep()返回汽车制造商在标题中每个元素中出现的位置的索引。我要它回来

idx = c(2, 2, 2, 2) #the makers' name occurs at the 2nd position of each element 
因为模式是字符串列表,所以我考虑使用mapply或Lappy来循环它。或者使用r命令将生成器名称更改为正则表达式,如

regexp = "Chevrolet|Nissan|Infiniti" 
到目前为止,我已经:

idx = lapply(maker.list, function(permaker){
   match.result = agrep(permaker, header, max.distance = 1)
   return (match.result)
})
这显然不起作用。。。有什么想法吗

-----------------------------更新-------------------------------- 我尝试了下面的一种解决方案,但奇怪的事情发生了

maker.list1 = c("zap", "ford")
lapply(maker.list1, agrep, c("2011" ,"Ford", "Escape"), max.distance = 1, ignore.case = TRUE)
结果是

[[1]]
[1] 3

[[2]]
[1] 2
说两场比赛,这对我来说毫无意义,我是不是错过了什么?
ps:在我的实际案例中,我有大约70家汽车制造商和超过4k的标题。

strsplit
您的
标题中的每个项目都按空格排列,然后通过每个项目运行
agrep

sapply(strsplit(header, "\\s+"), function(H) unlist(lapply(maker.list, agrep, H)) )
#[1] 2 2 2 2

如果您在任何情况下得到多个点击,您将得到一个
列表
,而不是一个向量。

在这个表达式中,您同时做了很多事情。是不是所有的绳子上都有汽车制造商在同一个地方?@polka不,它们可能不在同一个地方。我的目标是提取汽车模型,而不是汽车制造商。我手上只有一份汽车制造商的名单,而且汽车型号紧跟着汽车制造商,因此我想知道汽车制造商的索引,以便找到汽车型号。关于你的评论-
agrepl(“zap”,“Escape”)
返回
TRUE
是的,我在我的案例中得到了多次点击,但这很好。非常感谢你!我刚刚遇到了一些奇怪的结果,你想看看我的更新吗?@user3697665-你得到了所有关于脸的信息-
lapply(strsplit(“2011 Ford Escape”),“\\s+”),函数(H)未列出(lapply(maker.list1,agrep,H)))
报告
32
因为
zap
几乎匹配
Esc*ap*e
ford
匹配
ford