在R中检测字符串中的子字符串位置

在R中检测字符串中的子字符串位置,r,string,stringr,R,String,Stringr,考虑以下字符串: "NIKE STORE COVENT GARDEN" 假设我们正试图检测哪个品牌与以下向量匹配: brands <- c("ADIDAS", "NIKE", "PUMA", "COVENT", "CONVERSE") 很明显,这里的品牌是“NIKE”,我知道它始终位于位置之前。是否有某种方法可以定义一个规则,在检测到多个品牌的情况下,选择字符串中较早出现的品牌 注意:在上面的示例中,我们方便地将品牌名称显示在字符串的开头。然而,我们有时会有这样的情况,我们所考虑的字符

考虑以下字符串:

"NIKE STORE COVENT GARDEN"
假设我们正试图检测哪个品牌与以下向量匹配:

brands <- c("ADIDAS", "NIKE", "PUMA", "COVENT", "CONVERSE")
很明显,这里的品牌是“NIKE”,我知道它始终位于位置之前。是否有某种方法可以定义一个规则,在检测到多个品牌的情况下,选择字符串中较早出现的品牌


注意:在上面的示例中,我们方便地将品牌名称显示在字符串的开头。然而,我们有时会有这样的情况,我们所考虑的字符串是“0123耐克商店CoVoT花园”的形式< /P> < P>可以考虑使用Stry定位代替StryDebug。那么:

brands[which.min(str_locate("NIKE STORE COVENT GARDEN", brands)[,1])]

您使用的是哪个版本的R和stringr?R版本3.2.1;stringr版本1.0.0安装在R3.2.2中,我得到了正确的整数输出(不是文本),我怀疑您的r环境中有什么东西弄乱了它。您按原样编码返回
[1]24
@Tensibai您是对的,对不起。我编辑了我的问题。请参考上面的新版本,用作选择器或仅整数不会改变任何内容。我仍然有一个正确的结果(NIKE first),因此我怀疑
品牌
与您认为的顺序不符(可能在之前排序?这将给出此输出)或在base中,
哪个(sapply(brands,grepl,x=“NIKE STORE COVENT GARDEN”)[1]
brands[which.min(str_locate("NIKE STORE COVENT GARDEN", brands)[,1])]