提问人:Monelisa 提问时间:9/4/2023 最后编辑:desertnautMonelisa 更新时间:9/6/2023 访问量:54
如何在 R 中打开下载的 .csv 文件,该文件同时包含正确的重音字符和错误的重音字符?
How do I open in R a downloaded .csv file that contains both correct accented characters and faulty ones?
问:
我有一个 .csv 文件,其中包含正确和误读的重音字符。例如,第一行我有“Veríssimo”,第二行我有“VirgÃ-nia”(应该是 Virgínia)。 如果我什么都不做,它会打开文件,并拼写错误“Virgínia”。如果我尝试我所知道的更正方法之一,例如使用 UTF-8 编码保存文件,那么“Veríssimo”拼写错误。
在 R 中,我尝试过:它检测 UTF-8 编码并以拼写错误的“Veríssimo”打开。dados_MG2 <- read_csv("dados_MG.csv")
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
答:
2赞
Robert Hacken
9/4/2023
#1
您可以使用查找具有无效 UTF-8 字符的字符串,并将其替换为使用 ISO-8859-1 编码读取的字符串:nchar
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')
2赞
rps1227
9/4/2023
#2
另一个选项,只需要读取文件一次,并用于转换原始文件中未以 UTF-8 编码的名称:base::iconv()
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
评论