windows - studio - No se puede leer unicode.csv en R
r studio utf-8 (3)
Tengo un archivo .csv, que contiene los siguientes datos:
"Ա","Բ"
1,10
2,20
No puedo leerlo en R para que los nombres de las columnas se muestren como si estuvieran en el archivo.
d <- read.csv("./Data/1.csv", fileEncoding="UTF-8")
head(d)
Produce lo siguiente:
> 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)
Mientras tanto, hacer lo mismo sin especificar el archivoEncoding produce esto:
> d <- read.csv("./Data/1.csv")
> head(d)
Ô. Ô²
1 1 10
2 2 20
Cuando ejecuto la utilidad "archivo" para averiguar la codificación del archivo, dice que es UTF-8:
Data/1.csv: UTF-8 Unicode text, with CRLF line terminators
Estoy usando RStudio, Windows 7, R versión 2.15.2, 32 bits.
Gracias por adelantado.
Escribí una respuesta más larga sobre el mismo problema aquí: R en Windows: infierno de codificación de caracteres .
Respuesta rápida: usar la codificación de parámetros en lugar de fileEncoding debería solucionar su primer problema. No podrá leerlo posiblemente en la consola o en la vista de tabla en RStudio, pero podrá usarlo en las fórmulas.
d <- read.csv("./Data/1.csv", encoding="UTF-8")
head(d)
Después de haber guardado su tabla en un archivo 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''
Esto le muestra cómo se ve en la consola y la vista de RStudio
> test2
V1 V2
1 <U+0531> <U+0532>
2 1 10
3 2 20
Sin embargo, es importante que pueda manipular esto dentro de R. Por lo tanto, en mi caso es posible ver que la entrada de la ventana de script Ա tiene codificación UTF-8, y un grep encuentra esta codificación correctamente en su tabla.
> Encoding("Ա")
[1] "UTF-8"
> grep("Ա", as.character(test2[1,1]))
[1] 1
Es posible que necesite encontrar variantes de codificación adecuadas que funcionen en su configuración, o posiblemente cambiarlas. Lamentablemente, no estoy seguro de dónde se hace.
Es posible que no pueda hacerlo bonito en todas las etapas, pero definitivamente es posible hacer que funcione también en el entorno de Windows 7.
Intenté dos formas de replicar tu problema.
Copié los caracteres de arriba en RStudio, los guardé en un csv con este código:
write.csv(c("Ա","Բ",
1,10,
2,20), "test.csv")
df <- read.csv("test.csv")
Esto funcionó bien.
Entonces pensé, ¿quizás R está haciendo trampas cuando lo guardo en CSV con R? Así que solo pegué los caracteres en un archivo de texto y lo guardo como un archivo CSV. Este enfoque tampoco tiene problemas.
Aquí está la información de mi sesión:
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
Tuve el mismo problema y descubrí que el archivo estaba dañado.
Abrí el archivo con OpenOffice y lo guardé utilizando el juego de caracteres "UTF8" (debe hacer clic en el cuadro de read.csv()
editar configuración) y luego lo read.csv()
con la read.csv()
(sin codificación ni filencoding) y funcionó bien.