descriptive - Error al leer en conjunto de datos en R
summary by group in r (9)
Al leer en mi conjunto de datos en R de la siguiente manera:
Dataset.df <- read.table("C://dataset.txt", header=T)
Recibo el siguiente mensaje de error:
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
line 1 did not have 145 elements
¿Qué significa esto y alguien puede decirme cómo solucionarlo?
Además de todas las instrucciones mencionadas anteriormente, también puede consultar todos los datos.
Si hay espacios en blanco entre las palabras, debe reemplazarlos con "_"
.
Sin embargo así es como resuelvo mi propio problema.
Cuando me topé con este error y revisé mi conjunto de datos que parecía no tener datos faltantes, descubrí que algunas de mis entradas tenían el carácter especial "#" que descarriló la importación de los datos. Una vez que eliminé el "#" de las celdas infractoras, los datos se importaron sin problema.
El símbolo Hash #
crea este error, si puede eliminar el #
desde el inicio del nombre de la columna, podría solucionar el problema.
Básicamente, cuando el nombre de la columna comienza con #
entre filas, read.table()
se reconocerá como un punto de partida para esa fila.
Encontré este error cuando tuve un row.names = "id" (según el tutorial ) con una columna llamada "id".
Encontré este problema al importar algunos de los archivos de Agregar datos de estado a R (consulte: http://www.icpsr.umich.edu/icpsrweb/ICPSR/studies/21600?archive=ICPSR&q=21600 ) Por ejemplo, El siguiente comando para leer el archivo de datos DS12 en un formato .tsv separado por tabulación generará el siguiente error:
ds12 <- read.table("21600-0012-Data.tsv", sep="/t", comment.char="",
quote = "/"", header=TRUE)
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines,
na.strings, : line 2390 did not have 1851 elements
Parece que hay un pequeño problema de formato con algunos de los archivos que hacen que R rechace el archivo. Al menos parte del problema parece ser el uso ocasional de comillas dobles en lugar de un apóstrofe que provoca un número desigual de caracteres de comillas dobles en una línea.
Después de juguetear, he identificado tres soluciones posibles:
Abra el archivo en un editor de texto y busque / reemplace todas las instancias de un carácter de comillas "con nada. En otras palabras, elimine todas las comillas dobles. Para estos datos delimitados por tabuladores, esto significó solo que algunos extractos literales de comentarios de los sujetos no fueron correctos. más en citas que no era un problema para mi análisis de datos.
Con los datos almacenados en ICPSR (ver enlace anterior) u otros archivos, otra solución es descargar los datos en un nuevo formato. Una buena opción en este caso es descargar la versión Stata del DS12 y luego abrirla con el comando read.dta de la siguiente manera:
library(foreign) ds12 <- read.dta("21600-0012-Data.dta")
Una solución / pirata relacionada es abrir el archivo .tsv en Excel y volver a guardarlo como un archivo de texto separado por pestañas. Esto parece solucionar cualquier problema de formato que hace que R no esté contento.
Ninguno de estos es ideal, ya que no resuelven el problema en R con el archivo .tsv original, pero la manipulación de datos a menudo requiere el uso de múltiples programas y formatos.
Este error es bastante autoexplicativo. Parece que faltan datos en la primera línea de su archivo de datos (o en la segunda línea, según sea el caso, ya que está usando header = TRUE
).
Aquí hay un mini ejemplo:
## Create a small dataset to play with
cat("V1 V2/nFirst 1 2/nSecond 2/nThird 3 8/n", file="test.txt")
R detecta automáticamente que debe esperar nombres más dos columnas (3 elementos), pero no encuentra 3 elementos en la línea 2, por lo que aparece un error:
read.table("test.txt", header = TRUE)
# Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
# line 2 did not have 3 elements
Mire el archivo de datos y vea si hay un problema:
cat(readLines("test.txt"), sep = "/n")
# V1 V2
# First 1 2
# Second 2
# Third 3 8
La corrección manual puede ser necesaria, o podemos asumir que el primer valor del valor en la "Segunda" línea de fila debería estar en la primera columna, y los otros valores deberían ser NA
. Si este es el caso, fill = TRUE
es suficiente para resolver su problema.
read.table("test.txt", header = TRUE, fill = TRUE)
# V1 V2
# First 1 2
# Second 2 NA
# Third 3 8
R también es lo suficientemente inteligente como para saber cuántos elementos necesita, incluso si faltan nombres:
cat("V1 V2/n1/n2 5/n3 8/n", file="test2.txt")
cat(readLines("test2.txt"), sep = "/n")
# V1 V2
# 1
# 2 5
# 3 8
read.table("test2.txt", header = TRUE)
# Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
# line 1 did not have 2 elements
read.table("test2.txt", header = TRUE, fill = TRUE)
# V1 V2
# 1 1 NA
# 2 2 5
# 3 3 8
Para otros que no pueden encontrar una solución y saben que los datos no faltan elementos:
Tengo este problema cuando uso Excel 2013 para guardar archivos como .csv y luego intento cargarlos en R usando read.table (). La solución que he encontrado es pegar los datos directamente desde Excel a un documento .txt, y luego abrir con:
read.table(file.choose(), sep="/t").
Espero que esto ayude.
Si está utilizando Linux, y el archivo de datos es de Windows. Probablemente porque el carácter ^ M lo encuentra y lo borra. ¡hecho!
Una de mis variables era categórica, con una alternativa que era multi cadena ("sin evento"). Cuando utilicé read.table, asumí que el espacio después de la primera cadena significaba el final del punto de datos y la segunda cadena se empujó a la siguiente variable. Utilicé sep = "/ t" para resolver el problema. Estaba usando RStudio en un entorno Mac OX. Una solución anterior fue transformar los archivos .txt a .csv en Excel, y luego abrirlos con la función read.csv.