2016-11-04 144 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