如何在R中清除从Excel导入字符串中的隐藏字符?
解决R中Excel导入后字符串隐藏字符问题的思路
1. 先搞清楚隐藏字符是什么
用stringi包的stri_escape_unicode()把有问题的字符串转成Unicode转义序列,就能看到那些看不见的字符编码:
library(stringi) # 挑几个有问题的字符串测试 test_strings <- c("Check Plot ", "PRX-01GA2-22001") stri_escape_unicode(test_strings)
运行后会输出类似"Check Plot\\u202f\\u200b\\u200b"的结果,对应具体的隐藏Unicode字符(比如全角空格、零宽空格这类)。
2. 针对性清除隐藏字符
方法一:精准替换已识别的Unicode字符
如果已经知道是哪些字符(比如\u202f、\u200b),直接用stri_replace_all_unicode()替换为空:
moths %<>% mutate(Details = str_trim(Details), Details = stri_replace_all_unicode(Details, c("\\u202f", "\\u200b"), ""))
方法二:过滤所有非打印/无关字符
保留可打印的字母、数字、标点,加上巴西葡语常用的特殊字符(áéíóúñç等),过滤掉其他非打印字符:
moths %<>% mutate(Details = str_trim(Details), Details = str_replace_all(Details, "[^[:print:][:alpha:][:digit:][:punct:]áéíóúÁÉÍÓÚñÑçÇ\\s]", ""))
方法三:统一处理所有类型的空格
很多时候隐藏字符是各种Unicode空格(全角、窄空格等),用正则匹配所有空格类字符替换成普通空格,再trim:
moths %<>% mutate(Details = stri_replace_all_regex(Details, "\\p{White_Space}", " "), Details = str_trim(Details))
3. 验证处理效果
处理完后重新检查唯一值,确认重复项已合并:
sort(unique(moths$Details))
内容的提问来源于stack exchange,提问作者K Bro
相关产品推荐
相关产品推荐

