Ne peut pas lire le format unicode.csv en R
j'ai un .fichier csv qui contient les données suivantes:
"Ա","Բ"
1,10
2,20
Je ne peux pas le lire dans R de sorte que les noms de colonne sont affichés comme ils sont dans le fichier.
d <- read.csv("./Data/1.csv", fileEncoding="UTF-8")
head(d)
produit ce qui suit:
> d <- read.csv("./Data/1.csv", fileEncoding="UTF-8")
Warning messages:
1: In read.table(file = file, header = header, sep = sep, quote = quote, :
invalid input found on input connection './Data/1.csv'
2: In read.table(file = file, header = header, sep = sep, quote = quote, :
incomplete final line found by readTableHeader on './Data/1.csv'
> head(d)
[1] X.
<0 rows> (or 0-length row.names)
pendant ce temps, faire la même chose sans spécifier le fileEncoding produit ceci:
> d <- read.csv("./Data/1.csv")
> head(d)
Ô. Ô²
1 1 10
2 2 20
quand j'exécute l'utilitaire" file " pour trouver le codage du fichier, il dit QU'il est UTF-8:
Data.csv: UTF-8 Unicode text, with CRLF line terminators
j'utilise RStudio, Windows 7, R version 2.15.2, 32-bit.
Merci d'avance.
3 réponses
j'ai écrit une réponse plus longue sur la même question ici: R sur Windows: caractère encoding hell .
réponse rapide, en utilisant le paramètre encoding au lieu du fileEncoding devrait corriger votre première édition. Vous ne pourrez pas le lire en mode console ou table dans RStudio, mais vous pourrez l'utiliser dans les formulaires.
d <- read.csv("./Data/1.csv", encoding="UTF-8")
head(d)
après avoir sauvegardé votre table dans un fichier UTF-8:
> test2 <- read.csv("test2.csv", header = FALSE, sep = ",", quote = "\"", dec = ".", fill = TRUE, comment.char = "", encoding = "UTF-8")
Warning message:
In read.table(file = file, header = header, sep = sep, quote = quote, :
incomplete final line found by readTableHeader on 'test2.csv'
cela vous donne comment il ressemble dans la vue console et RStudio
> test2
V1 V2
1 <U+0531> <U+0532>
2 1 10
3 2 20
cependant important vous êtes en mesure de manipuler cela dans R. ainsi, dans mon cas, il est possible de voir que la fenêtre D'entrée du script a L'encodage UTF-8, et un grep trouve correctement cet encodage dans votre table.
> Encoding("Ա")
[1] "UTF-8"
> grep("Ա", as.character(test2[1,1]))
[1] 1
vous devrez peut-être trouver des variantes d'encodage appropriées qui fonctionnent sur vos paramètres, ou éventuellement les modifier. Malheureusement, je ne suis pas sûr où il est fait.
vous pourriez ne pas être en mesure de le faire joli à toutes les étapes, mais il est certainement possible de l'obtenir pour travailler aussi dans L'environnement Windows 7.
j'ai essayé deux façons de répliquer votre problème.
j'ai copié les caractères ci-dessus dans RStudio, Je l'ai enregistré dans un csv avec ce code:
write.csv(c("Ա","Բ",
1,10,
2,20), "test.csv")
df <- read.csv("test.csv")
ça a bien marché.
alors j'ai pensé, et bien peut-être que R triche quand je le garde à CSV avec R? Donc j'ai juste collé les caractères dans un fichier texte et je l'ai enregistré comme un CSV. Cette approche n'a pas de problèmes non plus.
Voici mon info de session:
sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_CA.UTF-8 LC_NUMERIC=C LC_TIME=en_CA.UTF-8
[4] LC_COLLATE=en_CA.UTF-8 LC_MONETARY=en_CA.UTF-8 LC_MESSAGES=en_CA.UTF-8
[7] LC_PAPER=C LC_NAME=C LC_ADDRESS=C
[10] LC_TELEPHONE=C LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats4 grid stats graphics grDevices utils datasets methods base
other attached packages:
[1] party_1.0-9 modeltools_0.2-21 strucchange_1.4-7 sandwich_2.2-10 zoo_1.7-10
[6] GGally_0.4.4 reshape_0.8.4 plyr_1.8 ggplot2_0.9.3.1
loaded via a namespace (and not attached):
[1] coin_1.0-23 colorspace_1.2-2 dichromat_2.0-0 digest_0.6.3
[5] gtable_0.1.2 labeling_0.2 lattice_0.20-23 MASS_7.3-29
[9] munsell_0.4.2 mvtnorm_0.9-9995 proto_0.3-10 RColorBrewer_1.0-5
[13] reshape2_1.2.2 scales_0.2.3 splines_3.0.1 stringr_0.6.2
j'ai eu le même problème et j'ai découvert que le fichier était corrompu.
j'ai ouvert le fichier avec OpenOffice et je l'ai sauvegardé en utilisant le jeu de caractères" UTF8 "(vous devez cliquer sur la boîte modifier les paramètres du filtre), puis je l'ai importé avec le read.csv()
(pas d'option d'encodage ou de filencoding) et ça a bien fonctionné.