2016-11-04 48 views
-1

我想問你,如果有像R.[R部分字符串匹配並返回匹配行的值(如在Excel中「匹配」)

在Excel中的「匹配」。例如類似的功能如果我有與人們的教育程度的數據集:由國際教育標準分類

> edu 
chr [1:4] "Bachelor" "NA" "Master" "Superieur" 

和一個國際測繪系統:

> ISCED 
Main education program      English translation     Code 
Brevet d'enseignement supérieur (BES)  certificate of higher education  5 
bachelier de transition      Bachelor        6 
Bachelor         Bachelor        6 
Master          Master         7  

我不知道是否有一個功能,可以幫助識別部分的來自數據幀ISCED第一列的向量edu中的字符串,然後如果匹配,則返回代碼(5,6或7)。

我知道有像「%like%」或「grepl」這樣的函數,但我正在尋找一些可以瀏覽矢量edu的所有值的東西,而不是每次定義一個特定的字符串。

有沒有人有任何見解?或者你們會建議使用「grepl」循環嗎?

謝謝!

+0

包裝它會是什麼預期的結果? –

+0

如果匹配,則返回「代碼」的值而不是整列。 – user95902

+0

看看'pmatch'。 – lmo

回答

0

一種方法是使用grep

製作帶有paste0的字符串矢量,並在與第一列匹配的位置獲取索引(Main_education_group)。使用該索引從數據框中獲取相應的Code

編輯

要獲得更新的輸出爲每個操作的要求,我們可以使用sapply和環比不斷元素edu和它檢查存在或不Main_education_program

sapply(edu, function(x) if(length(grep(x, ISCED$Main_education_program)) > 0) 
         ISCED$Code[grep(x, ISCED$Main_education_program)] else NA) 

其中返回

# Bachelor  NA Master Superieur 
#  6   NA   7  NA 

如果我們需要它沒有名字,我們可以在unname

unname(sapply(edu, function(x) if(length(grep(x, ISCED$Main_education_program))>0) 
        ISCED$Code[grep(x, ISCED$Main_education_program)] else NA)) 

#[1] 6 NA 7 NA 
+0

謝謝@Ronak!然而,我有這樣一個小問題,我無法知道哪些觀察結果是6和7所指的?也許我應該讓新來的人也回來? – user95902

+0

@ user95902好吧,你需要輸出長度爲'edu'嗎?就像在這種情況下,輸出應該是'6不適用7不適用' –

+0

是的exactement! – user95902