使用grepl()标准化巴西死亡记录地址列遇问题求助
解决R中grepl匹配地址失败的问题
可能的原因及解决方法
1. 字符编码或空白字符差异
老数据常存在特殊空白字符(如全角空格、非断空格)或编码不一致,导致字面匹配失效:
- 先检查目标字符串的原始字符编码:
# 替换为匹配失败的行号 charToRaw(recorte$local[1]) - 统一处理所有空白字符,替换为普通空格:
recorte$local <- gsub("\\s", " ", trimws(recorte$local))
2. 匹配规则过于冗余且覆盖不全
当前规则罗列大量变体但易遗漏其他写法,建议用更灵活的正则提取核心关键词:
- 优化后的匹配代码:
解释:# 匹配包含alvares/alves/alvaro + machado的所有变体,忽略大小写 amachado <- grepl("alv(a|e|o)res?\\s+machado", recorte$local, ignore.case = TRUE) recorte$local[amachado] <- "Rua Álvares Machado"alv(a|e|o)res?覆盖alvares、alves、alvaro(res?表示末尾的s可选)\\s+匹配一个或多个空白字符,兼容不同类型的空格ignore.case = TRUE自动处理大小写差异
3. 隐藏不可打印字符
数据中可能存在换行符、制表符等不可见字符,先清理:
# 去掉首尾空白和不可打印字符 recorte$local <- trimws(gsub("[^[:print:]]", "", recorte$local))
内容的提问来源于stack exchange,提问作者Giulia G. Kiefer
相关产品推荐
相关产品推荐

