这是我尝试tolower()从无法更改的文件(至少不是手动 - 太大)运行字符向量时收到的错误.
Error in tolower(m) : invalid multibyte string X
似乎是法国公司名称是É角色的问题.虽然我没有调查所有这些(也不可能手动这样做).
这很奇怪,因为我的想法是编码问题会在过程中被识别出来read.csv(),而不是在事后的操作过程中被识别出来.
有没有快速删除这些多字节字符串的方法?或者,也许是一种识别和转换的方法?或者甚至完全忽略它们?
Bra*_*sen 20
这是我解决问题的方法:
首先,我在texteditor(在本例中为Geany)中打开原始数据,单击属性并识别编码类型.
之后我使用了这个iconv()功能.
x <- iconv(x,"WINDOWS-1252","UTF-8")
Run Code Online (Sandbox Code Playgroud)
更具体地说,我是为data.frame导入的CSV中的每一列执行此操作.重要的是要注意我stringsAsFactors=FALSE在我的read.csv()电话中.
dat[,sapply(dat,is.character)] <- sapply(
dat[,sapply(dat,is.character)],
iconv,"WINDOWS-1252","UTF-8")
Run Code Online (Sandbox Code Playgroud)
小智 5
我遇到了同样的问题,找到了一个简单得多的解决方案(至少对于我的情况而言),并希望分享。
我只是简单地添加了编码,如下所示,它可以正常工作。
read.csv(<path>, encoding = "UTF-8")
library(tidyverse)
data_clean = data %>%
mutate(new_lowercase_col = tolower(enc2utf8(as.character(my_old_column))))
Run Code Online (Sandbox Code Playgroud)
new_lowercase_col我正在用旧的大写列创建的新列的名称在哪里,该列名为my_old_column.