在R语言中匹配两个字符向量相似词并生成对应匹配表
解决R语言字符串向量匹配并生成对应表的方案
可以用stringdist包的amatch函数实现精准的模糊匹配,再整理成你需要的两列对应表,具体步骤如下:
1. 安装并加载依赖包
如果还没安装stringdist,先执行安装命令:
install.packages("stringdist") library(stringdist)
2. 执行匹配并生成对应表
使用amatch计算每个uniques_df_deps元素在uniques_df_gini中的最佳匹配位置,再提取对应匹配值,无匹配则显示NA:
# 定义两个向量 uniques_df_deps <- c("Antioquia", "Atlántico", "Bogotá", "Bolívar", "Boyacá", "Caldas", "Caquetá", "Cauca", "Cesar", "Córdoba", "Cundinamarca", "Chocó", "Huila", "La Guajira", "Magdalena", "Meta", "Nariño", "Norte de Santander", "Quindío", "Risaralda", "Santander", "Sucre", "Tolima", "Valle del Cauca", "Arauca", "Casanare", "Putumayo", "San Andrés y Providencia", "Amazonas", "Guainía", "Guaviare", "Vaupés", "Vichada") uniques_df_gini<- c("Antioquia", "Atlántico", "Bogotá D.C.", "Bolívar", "Boyacá", "Caldas", "Caquetá", "Cauca", "Cesar", "Chocó", "Córdoba", "Cundinamarca", "Huila", "La Guajira", "Magdalena", "Meta", "Nariño", "Norte de Santander","Quindío", "Risaralda", "Santander", "Sucre", "Tolima", "Valle del Cauca") # 计算匹配位置,采用Jaro-Winkler距离,适合短字符串近似匹配 match_pos <- amatch(uniques_df_deps, uniques_df_gini, method = "jw", maxDist = 0.2) # 生成对应表 match_table <- data.frame( Deps_Identifier = uniques_df_deps, Gini_Match = ifelse(is.na(match_pos), NA, uniques_df_gini[match_pos]) )
3. 查看结果
执行后match_table就是你需要的两列对应表,部分结果示例如下:
| Deps_Identifier | Gini_Match |
|---|---|
| Antioquia | Antioquia |
| Atlántico | Atlántico |
| Bogotá | Bogotá D.C. |
| Bolívar | Bolívar |
| Arauca | NA |
| San Andrés y Providencia | NA |
参数说明
method = "jw":采用Jaro-Winkler距离算法,适合处理像"Bogotá"和"Bogotá D.C."这种前缀一致的字符串匹配maxDist = 0.2:设置最大匹配距离,超过这个值的视为无匹配,可根据需求调整(值越小匹配越严格)
内容的提问来源于stack exchange,提问作者John M. Riveros
相关产品推荐
相关产品推荐

