如何在R中打开下载的.csv文件,其中包含正确的重音字符和错误的?

oyxsuwqo  于 2023-09-27  发布在  其他
关注(0)|答案(2)|浏览(116)

我有一个.csv文件,其中包含正确和误读的重音字符。例如,在第一行我有“Veríssimo”,在第二行我有“Virgí-nia”(本来应该是Virgínia)。如果我什么都不做,它会打开一个拼写错误的“Virgínia”文件。如果我尝试一种我知道的纠正方法,比如用UTF-8编码保存文件,那么“Veríssimo”就拼错了。
在R中,我尝试:dados_MG2 <- read_csv("dados_MG.csv")检测UTF-8编码,打开时“Veríssimo”拼写错误。
dados_MG <- read_csv("Dados/extra/dados_MG.csv", locale = locale(encoding = "ISO-8859-1"))我尝试强制使用不同的编码,使用它,“Veríssimo”拼写正确,但“Virgínia”不正确。
以下是我的数据集链接:https://github.com/elisa-fink/THM

yvfmudvl

yvfmudvl1#

您可以使用nchar查找包含无效UTF-8字符的字符串,并将其替换为使用ISO-8859-1编码读取的字符串:

dados_MG <- read_csv('dados_MG.csv')
dados_MG.iso <- read_csv('dados_MG.csv', locale = locale(encoding = 'ISO-8859-1'))

not.utf <- is.na(nchar(dados_MG$DS_NOME, allowNA=T))
dados_MG$DS_NOME[not.utf] <- dados_MG.iso$DS_NOME[not.utf]

grep('^Ver.ss|^Virg.ni', dados_MG$DS_NOME, value=T)
# [1] "Veríssimo" "Virgínia"

一个更简单的变体,只阅读一次CSV文件(* 灵感来自 *@rps1227的答案 *):

dados_MG <- read_csv('dados_MG.csv')
not.utf <- is.na(nchar(dados_MG$DS_NOME, allowNA=T))
dados_MG$DS_NOME[not.utf] <- 
  iconv(dados_MG$DS_NOME[not.utf], from='ISO-8859-1', to='UTF-8')
mspsb9vt

mspsb9vt2#

另一个选项只需要阅读文件一次,并使用base::iconv()转换原始文件中未使用UTF-8编码的名称:

dados_MG <- read_csv("./dados_MG.csv") %>%
  mutate(encode_issues = is.na(unlist(lapply(DS_NOME, nchar, allowNA = TRUE)))) %>%
  mutate(DS_NOME = if_else(encode_issues,
                           iconv(DS_NOME, from = "ISO-8859-1",
                                 to = "UTF-8"),
                           DS_NOME)) %>%
  select(-encode_issues)

grep('^Ver.ss|^Virg.ni', dados_MG$DS_NOME, value=T)
#> [1] "Veríssimo" "Virgínia"

创建于2023-09-04使用reprex v2.0.2

相关问题