2012-07-26 13 views
12

Estoy tratando de leer un archivo delimitado lengüeta grande a R.lectura Ficha de datos delimitado en el que R

Primero probé esto:

data <- read.table("data.csv", sep="\t") 

Pero es la lectura de algunas de las variables numéricas en como factores

Así que traté de leer en los datos en función de qué tipo quiero cada variable que ser así:

data <- read.table("data.csv", sep="\t", colClasses=c("character","numeric","numeric","character","boolean","numeric")) 

Pero cuando intento esto me da un error:

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : scan() expected 'a real', got '"4"'

yo creo que puede ser que hay entre comillas algunos de los valores numéricos en el archivo RAW original, pero no estoy seguro.

Respuesta

7

Sin ver sus datos, tiene una de algunas cosas: no tiene todas las pestañas que separan los datos; hay pestañas embebidas en observaciones individuales; o un litnay de otros.

La forma en que puede resolver esto es establecer options(stringsAsFactors=FALSE) y luego usar su primera línea.

Consulte str(data) y trate de averiguar qué filas son las culpables. La razón por la cual algunos de los valores numéricos están leyendo como factores es porque hay algo en esa columna que R está interpretando como un carácter y por lo tanto coacciona toda la columna al carácter. Por lo general, se necesita algo de excavación, pero el problema casi seguro es con su archivo de entrada.

Este es un problema común de munging de datos, ¡buena suerte!

+0

Gracias por la respuesta. Eso ayuda, pero en lugar de importar las variables que quiero importar como numéricas, las importa como caracteres. Cuando trato de convertirlo a una variable numérica, me da NA para todas las observaciones. Aunque voy a echar un vistazo más de cerca a los datos para ver las sugerencias que hizo. – Ford

+0

Oh, mirando más de cerca su error, ha sido citado cuatro. "4" R ha puesto un conjunto extra de comillas simples a su alrededor "" 4 "'. esto significa que en su archivo tsv, sus números son citados y, por lo tanto, tratados como char. agregue quote = '"' a su línea read.table y vea cómo funciona eso para usted. – Justin

+0

El problema es definitivamente que en mi archivo de datos sin procesar los valores están entrecomillados por lo que está leyendo los valores como caracteres cuando deberían ser numeric. Intenté el quote = '"' mencionado anteriormente, pero eso no soluciona el problema ... El archivo de datos sin procesar también es demasiado grande, así que no puedo eliminar las comillas en un editor de texto o excel sin bloquear los programas – Ford

1
x <- paste("'",floor(runif(10,0,10)),"'",sep="") 
x 

[1] "'7'" "'3'" "'0'" "'3'" "'9'" "'1'" "'4'" "'8'" "'5'" "'8'" 

as.numeric(gsub("'", "",x)) 

[1] 7 3 0 3 9 1 4 8 5 8