Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 来自不同数据文件的相同字符串赢得';不匹配_R_String Matching - Fatal编程技术网

R 来自不同数据文件的相同字符串赢得';不匹配

R 来自不同数据文件的相同字符串赢得';不匹配,r,string-matching,R,String Matching,我正在进行一些文件合并,但两个文件不会合并——尽管有一个匹配的键列(实际上,我通过复制粘贴从另一个键列生成了一个键列)。这是最糟糕的事情,我担心我不是疯了就是错过了一些基本的东西。作为一个例子(我不知道如何使其可复制,因为当我将这些字符串复制并粘贴到新对象中时,它们的比较很好),这里是我当前的控制台: > q [1] "1931 80th Anniversary" > z [1] "1931 80th Anniversary" > q =

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

> 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"

这里会发生什么事?

这是一个很好的难题。回答-诊断问题,
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"
最后,我在q上使用了
iconv()

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

这是一个奇怪的旅程,我希望这能帮助像我一样困惑的其他人——他们在这一过程中学习了一些新函数。

看起来字符串中有不间断的空格,这实际上不是编码问题。这种情况经常发生在我身上,因为alt+space在Mac电脑上插入了一个不间断的空格,我在德语键盘上也使用alt来输入各种特殊字符。我的小指是我最慢的手指,当我从某个特殊角色过渡到某个空格时,它们释放alt的速度总是不够快。我在编写bash脚本时发现了这个问题,其中
很常见,而
是alt+7


我认为
stringr::str\u replace\u all(q,“\\s,”)
应该可以解决您当前的问题。或者,您可以尝试针对特定的非打印内容,例如在您的情况下
stringr::str_replace_all(q,“\uA0”,”)
。要暴露有问题的字符,可以使用
stringi::stri\u escape\u unicode(q)
,它将返回
“1931\\u00a080th\\u00a080th”
。然后,您只需复制并粘贴即可获得与上面相同的结果:
stringr::str_replace_all(q,“\u00a0”,“u”)

OK-
Encoding()
显示一个是UTF-8,另一个是“未知的”-因此。奇怪的如果我选中其中一个,iconv()似乎可以修复它。这真的很奇怪。我无法复制您在这里提供的值,所以很难说发生了什么。可能比较两个字符串的
charToRaw()
值。将
dput(q)
dput(z)
添加到您的帖子中。这很可能没有帮助,但其中一个字符串中可能有一个“隐藏”字符。我曾经经历过,也几乎发疯了。这是一个柔和的连字符:看:。是的。就是这样。我喜欢你的解决方案!奇怪的是,这是因为我直接从Rstudio中的View()复制粘贴,这使得所有间隔都不中断!哈