首页 > 解决方案 > 来自不同数据文件的相同字符串在 R 中不匹配

问题描述

我正在做一些文件合并,但两个文件不会 - 尽管有一个匹配的键列(我实际上是通过从另一个键列复制粘贴来生成一个键列)。这是最糟糕的事情,我担心我要么发疯,要么错过一些基本的东西。举个例子(我不知道如何使它可重现,因为当我将这些字符串复制并粘贴到新对象中时,它们比较好),这是我当前的控制台:

> q
[1] "1931 80th Anniversary"
> z
[1] "1931 80th Anniversary"
> q == z
[1] FALSE

我对两者都进行了测试,以防万一我错过了什么,并且...

> str(q)
 chr "1931 80th Anniversary"
> str(z)
 chr "1931 80th Anniversary"

这里会发生什么?

标签: rstring-matching

解决方案


这是一个很棒的谜题。回答 - 诊断问题,charToRaw()就是答案。

> charToRaw(q)
 [1] 31 39 33 31 c2 a0 38 30 74 68 c2 a0 41 6e 6e 69 76 65
[19] 72 73 61 72 79
> charToRaw(z)
 [1] 31 39 33 31 20 38 30 74 68 20 41 6e 6e 69 76 65 72 73
[19] 61 72 79

哦!不同的!它似乎在于编码,鉴于这些都是我加载的普通 ole' CSV,我永远不会猜到,但是

> Encoding(q)
[1] "UTF-8"
> Encoding(z)
[1] "unknown"

最后,我使用iconv()了 q 让它工作

> iconv(q, from = 'UTF-8', to = 'ASCII//TRANSLIT') == z
[1] TRUE

这是一段奇怪的旅程,我希望这可以帮助像我一样困惑的其他人 - 他们在此过程中学习了一些新功能。


推荐阅读