2016-03-10 35 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!='']'這是固定的......怪異的...... – nanounanue

1

嘗試這種情況:

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

此解決方案的工作原理!謝謝 – nanounanue

相關問題