R中两个看似相同的字符串向量去重结果不一致问题求助
问题原因
你遇到的是隐藏Unicode控制字符导致的字符串判定差异:dd的第一个"Grant"开头带有肉眼不可见的U+FEFF零宽度无间断空格(即UTF-8 BOM头字符),这类字符通常是Excel导出UTF-8编码文件时附带产生的,字符串去重、判等逻辑会将其识别为有效内容,因此两个看起来完全一致的字符串会被判定为不同值。
差异验证
你可以通过charToRaw函数查看字符串的原始字节,直观看到二者的差异:
# 查看dd第一个元素的原始字节 charToRaw(dd[1]) # 输出会以 ef bb bf 三个字节开头,对应U+FEFF字符 # 查看dd第二个元素的原始字节 charToRaw(dd[2]) # 输出仅包含"Grant"对应的正常字节,无多余前缀
解决方法
读取阶段规避
如果使用readxl包读取Excel文件,升级到1.4.0及以上版本会默认处理UTF-8 BOM,也可手动指定编码为UTF-8-BOM。
已读数据清洗
可以用以下任意一种方法移除隐藏的控制字符:
# 方法1:base R 直接替换BOM字符 dd_clean <- gsub("\uFEFF", "", dd) length(unique(dd_clean)) # 输出为1 # 方法2:批量移除所有常见零宽度控制字符(适用更广的隐藏字符场景) library(stringr) dd_clean <- str_remove_all(dd, "[\uFEFF\u200B-\u200D\u2060]")
内容的提问来源于stack exchange,提问作者larry77
相关产品推荐
相关产品推荐

