我想问你是否在R中的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”这样的函数,但我正在寻找可以浏览vector edu的所有值而不是每次都定义一个特定字符串的东西。
有人有任何见解吗?或者你们建议使用带有“grepl”的循环吗?
谢谢!
答案 0 :(得分:0)
一种方法是使用grep
。
使用paste0
制作字符串向量,并在与第一列(Main_education_group
)匹配的位置获取索引。使用该索引从数据框中获取相应的Code
。
ISCED$Code[grep(paste0(edu, collapse = "|"), ISCED$Main_education_program)]
#[1] 6 7
修改强>
要根据OP的请求获取更新的输出,我们可以使用sapply
并循环遍历edu
中的所有元素,并检查它是否存在于Main_education_program
< / p>
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