tolower()无效的多字节字符串出错

Bra*_*sen 14 r

这是我尝试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)

  • 对于那些像我这样懒于识别编码的人来说,可以选择`x &lt;-enc2utf8(x)`。 (3认同)

小智 5

我遇到了同样的问题,找到了一个简单得多的解决方案(至少对于我的情况而言),并希望分享。

我只是简单地添加了编码,如下所示,它可以正常工作。

read.csv(<path>, encoding = "UTF-8")

  • 或“ ISO-8859-1”或“ Windows-1252”。很棒的Onur! (2认同)

dmt*_*dmt 5

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.