Определение местоположения подстроки в строке в R

Рассмотрим следующую строку:

"NIKE STORE COVENT GARDEN"

Предположим, мы пытаемся определить, какой бренд соответствует следующему вектору:

brands <- c("ADIDAS", "NIKE", "PUMA", "COVENT", "CONVERSE")

Вот что я сделал с полученным результатом:

library(stringr)
> brands[str_detect("NIKE STORE COVENT GARDEN", brands)]
[1] "COVENT"    "NIKE"

Ясно, что бренд здесь - «NIKE», и я знаю, что он всегда находится перед местом. Можно ли каким-то образом определить правило, согласно которому в случае обнаружения нескольких брендов я выбираю тот, который появляется раньше в строке?

ПРИМЕЧАНИЕ. В приведенном выше примере название бренда удобно размещается в начале строки. Однако иногда мы имеем дело с тем, что рассматриваемая нами строка имеет вид «0123 NIKE STORE COVENT GARDEN».


person MN Beitelmal    schedule 22.10.2015    source источник
comment
какую версию R и Stringr вы используете?   -  person Tensibai    schedule 22.10.2015
comment
R версии 3.2.1; stringr версии 1.0.0   -  person MN Beitelmal    schedule 22.10.2015
comment
appart с r 3.2.2, я получил правильный целочисленный вывод (не текст), я подозреваю, что что-то в вашей среде R возится с этим. Вы кодируете как есть return [1] 2 4   -  person Tensibai    schedule 22.10.2015
comment
@Tensibai, извини, ты прав. Я отредактировал свой вопрос. Пожалуйста, ознакомьтесь с новой версией   -  person MN Beitelmal    schedule 22.10.2015
comment
Как и выше, использование в качестве селектора или просто целого числа ничего не меняет. У меня все еще есть правильный результат (сначала NIKE), поэтому я подозреваю, что brands находится не в том порядке, в котором вы думаете (возможно, отсортировано раньше? Это даст такой результат)   -  person Tensibai    schedule 22.10.2015
comment
Да, я не могу рассчитывать, что порядок всегда будет таким, так как бренды в моем реальном случае упорядочены по алфавиту, а рассматриваемые строковые сущности нет и не могут быть заказаны   -  person MN Beitelmal    schedule 22.10.2015
comment
Чтобы скорректировать еще немного: Бренд всегда будет первым словом предложения? (кажется, нам нужен более полный набор примеров ввода и ожидаемого вывода)   -  person Tensibai    schedule 22.10.2015


Ответы (1)


Вы можете рассмотреть возможность использования str_locate вместо str_detect. Как насчет :

brands[which.min(str_locate("NIKE STORE COVENT GARDEN", brands)[,1])]
person jlesuffleur    schedule 22.10.2015
comment
Или в базе which(sapply(brands,grepl,x="NIKE STORE COVENT GARDEN"))[1] - person MichaelChirico; 22.10.2015