2016-03-10 2 views
1

У меня есть один вектор строк, например, один элемент:Извлечение слова из строки, если содержится в списке (в R)

"MG08-004121-0040 : LECTOR DE CODIGO DE BARRAS MARCA DATALOGIC MODELO MAGELLAN 800i ALIMENTACION ELECTRICA 5 Vcc" 

и у меня есть еще один вектор строк для соответствия:

c("EC", "DATALOGIC", "SONY") 

Я хочу вернуться (если таковые имеются) в слово в первой строке, если она соответствует одному слову из списка.

В примере он должен вернуть DATALOGIC

Есть идеи?

+1

Тщательное со словом * список *, список является конкретный класс в R. 'c (" EC "," DATALOGIC "," SONY ")' является вектором, и он сильно отличается от 'list (" EC "," DATALOGIC "," SONY ")'. (Я отредактировал ваш вопрос, чтобы удалить слово «список».) – Gregor

+0

Вы правы. Я программировал в 'python' и переключался на' R'. Я уже редактировал комментарии ниже. – nanounanue

ответ

1

Мы можем комбинировать элементы второго вектора, чтобы сформировать регулярное выражение выражение:

library(stringr) 
str_extract_all(x, paste0("\\b", paste(y, collapse="|"), "\\b")) 
[1] "DATALOGIC" 
+0

Если я использую вектор строк вопроса, он работает, но если я использую больший вектор, он терпит неудачу. Ты знаешь почему? – nanounanue

+0

Снять '[[1]]' –

+0

Я только что увидел ошибку. В моем векторе у меня есть: 'c (" EC "," "," DATALOGIC "," SONY ")' если я удалю пустое пространство: 'y <- y [y! = '']' Исправлено ... weird ... – nanounanue

1

Попробуйте это:

intersect(strsplit(string,'\\s')[[1]],vec) 
#[1] "DATALOGIC" 
+0

Это решение работает! благодаря – nanounanue

Смежные вопросы