J'essaie d'importer un csv qui est en japonais. Ce code:
url <- 'http://www.mof.go.jp/international_policy/reference/itn_transactions_in_securities/week.csv'
x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE)
renvoie l'erreur suivante:
Error in type.convert(data[[i]], as.is = as.is[i], dec = dec, na.strings = character(0L)) :
invalid multibyte string at '<91>ΊO<8b>y<82>ёΓ<e0><8f>،<94><94><84><94><83><8c>_<96>????̏????@(<8f>T<8e><9f><81>E<8e>w<92><e8><95>????@<8a>փx<81>[<83>X<81>j'
J'ai essayé de changer l'encodage (Encoding(url) <- 'UTF-8'
et aussi en latin1) et j'ai essayé de supprimer les paramètres read.csv, mais j'ai reçu le même message "chaîne multioctet invalide" dans chaque cas. Existe-t-il un codage différent à utiliser ou existe-t-il un autre problème?
Encoding
définit le codage d'une chaîne de caractères. Il ne définit pas l'encodage du fichier représenté par la chaîne de caractères, ce que vous voulez.
Cela a fonctionné pour moi, après avoir essayé "UTF-8"
:
x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE, fileEncoding="latin1")
Et vous pouvez sauter les 16 premières lignes et lire séparément les en-têtes. Quoi qu'il en soit, il reste encore beaucoup de nettoyage à faire.
x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE,
fileEncoding="latin1", skip=16)
# get started with the clean-up
x[,1] <- gsub("\u0081|`", "", x[,1]) # get rid of odd characters
x[,-1] <- as.data.frame(lapply(x[,-1], # convert to numbers
function(d) type.convert(gsub(d, pattern=",", replace=""))))
Vous avez peut-être rencontré ce problème en raison de l'incompatibilité des paramètres régionaux du système, essayez de définir les paramètres régionaux du système avec ce code Sys.setlocale("LC_ALL", "C")
Le paquet readr de l'univers tidyverse pourrait aider.
Vous pouvez définir l'encodage via l'argument local de la fonction read_csv()
en utilisant la fonction local()
et son argument d'encodage:
read_csv(file = "http://www.mof.go.jp/international_policy/reference/itn_transactions_in_securities/week.csv",
skip = 14,
local = locale(encoding = "latin1"))
La solution la plus simple que j'ai trouvée pour ce problème sans perdre aucune donnée/caractère spécial (par exemple lors de l'utilisation de fileEncoding="latin1"
les caractères comme le signe Euro € seront perdus) consiste à ouvrir le fichier d'abord dans un éditeur de texte comme Sublime Text, puis à "Enregistrer avec encodage - UTF-8".
Ensuite, R peut importer le fichier sans problème et sans perte de caractère.
J'ai eu la même erreur et j'ai essayé tout ce qui précède en vain. Le problème a disparu lors de la mise à niveau de R 3.4.0 vers 3.4.3, donc si votre version R n'est pas à jour, mettez-la à jour!
Pour ceux qui utilisent Rattle
avec ce problème, voici comment je l'ai résolu:
> library (rattle)
(si ce n'est déjà fait)> crv$csv.encoding="latin1"
> rattle()
Cela a fonctionné pour moi, j'espère que cela aide un voyageur fatigué
Si le fichier que vous essayez d'importer dans R était à l'origine un fichier Excel. Assurez-vous d'ouvrir le fichier d'origine et d'enregistrer en tant que csv et cela a corrigé cette erreur pour moi lors de l'importation dans R.
J'ai eu un problème similaire avec des articles scientifiques et j'ai trouvé une bonne solution ici: http://tm.r-forge.r-project.org/faq.html
En utilisant la ligne de code suivante:
tm_map(yourCorpus, content_transformer(function(x) iconv(enc2utf8(x), sub = "byte")))
vous convertissez les chaînes multi-octets en code hexadécimal. J'espère que ça aide.