2016-11-04 8 views
-1

(Excelで「マッチ」のように)一致した行から値を返します。 ISCEDによってR部分文字列の一致とは、私がお聞きしたいと思い

> 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をフェッチします。我々はeduで、これまでの要素の上にsapplyとループを使用することができますし、それのチェックが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) 
中に存在するかではありませんOPの要求に従って更新された出力を得るために

EDIT

返す

# 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

ありがとう@ロナク!しかし、私はこのようにマイナーな問題を抱えていますが、どの観測値が6と7であるのかを知ることができませんでしたか?たぶん、NAsも返されるべきでしょうか? – user95902

+0

@ user95902大丈夫です。長さが 'edu'である必要がありますか?この場合のように、出力は '6 NA 7 NA' –

+0

でなければなりません! – user95902

関連する問題