Tengo un archivo CSV (24.1 MB) que no puedo leer completamente en mi sesión de R. Cuando abro el archivo en un programa de hoja de cálculo, puedo ver 112.544 filas. Cuando lo leo en R con read.csv
solo obtengo 56,952 filas y esta advertencia:
cit <- read.csv("citations.CSV", row.names = NULL,
comment.char = "", header = TRUE,
stringsAsFactors = FALSE,
colClasses= "character", encoding= "utf-8")
Warning message:
In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
EOF within quoted string
Puedo leer todo el archivo en R con readLines
:
rl <- readLines(file("citations.CSV", encoding = "utf-8"))
length(rl)
[1] 112545
Pero no puedo devolver esto a R como una tabla (vía read.csv
):
write.table(rl, "rl.txt", quote = FALSE, row.names = FALSE)
rl_in <- read.csv("rl.txt", skip = 1, row.names = NULL)
Warning message:
In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
EOF within quoted string
¿Cómo puedo resolver o solucionar este mensaje EOF (que parece ser más un error que una advertencia) para obtener el archivo completo en mi R
sesión?
Tengo problemas similares con otros métodos de lectura de archivos CSV:
require(sqldf)
cit_sql <- read.csv.sql("citations.CSV", sql = "select * from file")
require(data.table)
cit_dt <- fread("citations.CSV")
require(ff)
cit_ff <- read.csv.ffdf(file="citations.CSV")
Aquí está mi sessionInfo ()
R version 3.0.1 (2013-05-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] tools tcltk stats graphics grDevices utils datasets methods base
other attached packages:
[1] ff_2.2-11 bit_1.1-10 data.table_1.8.8 sqldf_0.4-6.4
[5] RSQLite.extfuns_0.0.1 RSQLite_0.11.4 chron_2.3-43 gsubfn_0.6-5
[9] proto_0.3-10 DBI_0.2-7
r
csv
eof
read.table
Ben
fuente
fuente
fread
trabajar en esta situación? Prefiero eso porque es mucho más rápido queread.csv
. Perofread
no parece tener unaquote
discusión ..fread
, no funciona bien con una cita incrustada en general, pero estoy seguro de que pronto habrá una solución. stackoverflow.com/questions/16094025/…write.csv()
y estaba recuperando 403read.csv()
. Agregar quote = "" me llevó hasta 410 filas.read.table()
no hace mejor Me pregunto qué más se puede probar ...Soy un nuevo usuario de R y pensé en publicar esto en caso de que ayude a alguien más. Estaba tratando de leer datos de un archivo de texto (separado por comas) que incluía algunos caracteres en español y me llevó una eternidad descubrirlo. Sabía que tenía que usar la codificación UTF-8, establecer el argumento de encabezado en VERDADERO, y que necesitaba establecer el argumento de sep en ",", pero aún así tuve problemas. Después de leer esta publicación , intenté establecer el argumento de relleno en TRUE, pero luego obtuve el mismo "EOF dentro de la cadena citada" que pude arreglar de la misma manera que arriba. Mi read.table exitosa se ve así:
target <- read.table("target2.txt", fill=TRUE, header=TRUE, quote="", sep=",", encoding="UTF-8")
El resultado tiene caracteres en español y los mismos colores que tenía originalmente, ¡así que lo llamo un éxito! ¡Gracias a todos!
fuente
En la sección de ayuda de R, como se señaló anteriormente, simplemente deshabilita las citas, simplemente agregando:
al read.csv () funcionó para mí.
El error, "EOF dentro de la cadena entre comillas", ocurrió con:
Y en el archivo leído faltaban 6.619 líneas. Pero al deshabilitar las citas
Funcionó sin error y todas las líneas se leyeron con éxito.
fuente
También me encontré con este problema y pude solucionar un error EOF similar usando:
Observe que el parámetro separador se define dentro del más general
read.table()
.fuente
En realidad, usar
read.csv()
para leer un archivo con contenido de texto no es una buena idea, deshabilitar la cita como conjuntoquote=""
es solo una solución temporal, solo funcionó con comillas separadas. Hay otras razones que causarían la advertencia, como algunos caracteres especiales.La solución permanente (usar
read.csv()
), descubrir cuáles son esos caracteres especiales y usar una expresión regular para eliminarlos es una idea.¿Alguna vez pensó en instalar el paquete
{data.table}
y utilizarlofread()
para leer el archivo? es mucho más rápido y no te molestaría con esta advertencia EOF. Tenga en cuenta que el archivo que carga se almacenará como un objeto data.table pero no como un objeto data.frame. La clase data.table tiene muchas características buenas, pero de todos modos, puede transformarla usandoas.data.frame()
si es necesario.fuente
Tuve el problema similar: advertencia EOF y solo parte de los datos se estaba cargando con read.csv (). Intenté las comillas = "", pero solo eliminó la advertencia EOF.
Pero al observar la primera fila que no se estaba cargando, descubrí que había un carácter especial, una flecha → (valor hexadecimal 0x1A) en una de las celdas. Después de eliminar la flecha, obtuve los datos para cargar normalmente.
fuente
Yo también tuve el problema similar. Pero en mi caso, la causa del problema se debió a la presencia de apóstrofes (es decir, comillas simples) dentro de algunos de los valores de texto. Esto es especialmente frecuente cuando se trabaja con datos que incluyen textos en francés, por ejemplo, «L'autre jour».
Por lo tanto, la solución era simplemente para ajustar la configuración por defecto del argumento cita para excluir la «'» símbolo, y por lo tanto, el uso de quote = '\' " (es decir, el doble comilla única ), todo funcionaba bien.
Espero que pueda ayudar a algunos de ustedes. Salud.
fuente
El paquete de lectura solucionará este problema.
fuente