这是当我试图对一个无法更改(至少不能手动更改-太大)的文件中的字符向量运行tolower()
时收到的错误。
Error in tolower(m) : invalid multibyte string X
似乎法国公司名称是É
字符的问题所在。尽管我没有调查过所有这些问题(也不可能手动进行调查)。
这很奇怪,因为我的想法是编码问题应该在read.csv()
过程中发现,而不是在事后的操作过程中。
有没有一种快速删除这些多字节字符串的方法?或者,也许是一种识别和转换的方法?或者干脆完全忽略它们?
发布于 2012-11-02 11:50:45
下面是我如何解决我的问题的:
首先,我在一个texteditor (在本例中是Geany)中打开原始数据,单击属性并标识Encoding类型。
之后我使用了iconv()
函数。
x <- iconv(x,"WINDOWS-1252","UTF-8")
更具体地说,我对导入的CSV中data.frame
的每一列都执行了此操作。重要的是要注意,我在read.csv()
调用中设置了stringsAsFactors=FALSE
。
dat[,sapply(dat,is.character)] <- sapply(
dat[,sapply(dat,is.character)],
iconv,"WINDOWS-1252","UTF-8")
发布于 2019-01-18 23:49:21
我也收到了同样的错误。然而,在我的例子中,它不是在我读取文件时,而是在处理它时稍晚一点。我意识到我得到了这个错误,因为文件从一开始就没有使用正确的编码读取。
我找到了一个更简单的解决方案(至少对我的情况而言),并想分享一下。我简单地添加了编码,如下所示,它起作用了。
read.csv(<path>, encoding = "UTF-8")
发布于 2014-07-23 03:26:45
我知道这个问题已经得到了回答,但我认为我应该分享我的解决方案,因为我经历了同样的事情。
在我的示例中,我使用了stringr
包中的函数str_trim()
来修剪字符串开头和结尾的空格。
com$uppervar<-toupper(str_trim(com$var))
https://stackoverflow.com/questions/13187605
复制相似问题