Hoy finalmente he decidido comenzar a escalar la empinada curva de aprendizaje de R. He pasado unas horas y he logrado importar mi conjunto de datos y hacer algunas otras cosas básicas, pero estoy teniendo problemas con el tipo de datos: una columna que contiene decimales se importa como un número entero, y la conversión a doble cambia los valores .Problemas al importar un archivo csv/conversión de un número entero al doble en R
Al tratar de obtener un pequeño archivo csv para poner aquí como ejemplo descubrí que el problema sólo ocurre cuando el archivo de datos es demasiado grande (mi archivo original es una matriz de 1.048.418 por 12, pero incluso con "solamente "5000 filas tengo el mismo problema. Cuando solo tengo 100, 1000 o incluso 2000 filas, la columna se importa correctamente como doble).
Here es un conjunto de datos más pequeño (aún 500kb, pero, de nuevo, si el conjunto de datos es pequeño, el problema no se replica). El código es
> ex <- read.csv("exampleshort.csv",header=TRUE)
> typeof(ex$RET)
[1] "integer"
¿Por qué es la columna de los rendimientos que se importa como entero cuando el archivo es grande, cuando es claramente del tipo doble?
Lo peor es que si trato de convertirlo en dobles, los valores se cambian
> exdouble <- as.double(ex$RET)
> typeof(exdouble)
[1] "double"
> ex$RET[1:5]
[1] 0.005587 -0.005556 -0.005587 0.005618 -0.001862
2077 Levels: -0.000413 -0.000532 -0.001082 -0.001199 -0.0012 -0.001285 -0.001337 -0.001351 -0.001357 -0.001481 -0.001486 -0.001488 ... 0.309524
> exdouble[1:5]
[1] 1305 321 322 1307 41
Ésta no es la única columna que se importa mal, pero pensé que si encuentro una solución para una columna, debería ser capaz de ordenar los otros. Aquí hay más información:
> sapply(ex,class)
PERMNO DATE COMNAM SICCD PRC RET RETX SHROUT VWRETD VWRETX EWRETD EWRETX
"integer" "integer" "factor" "integer" "factor" "factor" "factor" "integer" "numeric" "numeric" "numeric" "numeric"
Deben ser en este orden: número entero, fecha, cadena, entero, dobles, matrimoniales, dobles, número entero, dobles, dobles, dobles, dobles (los tipos son probablemente equivocado, pero con suerte obtendrá lo que quiero decir)
@Xu Wang: la primera mitad no va a funcionar.Reducirlo a las primeras 5 mil observaciones, menos del 1% de mis datos, ya crea problemas ... – Vivi
siento que no terminé mi comentario porque fui y leí la ayuda 'read.csv'. Lo que quería decir es que pensé que tal vez había algunos valores extraños que confundían a 'R'. Así que pensé que no era un hecho grande o pequeño, sino que el gran conjunto de datos tiene uno de esos caracteres o valores confusos. ¿Tiene sentido? Si no, no importa. Creo que la solución es usar el argumento colClasses. –
@Xu Wang Entiendo lo que dices, pero todavía no estoy muy seguro de cómo resolver mi problema. ¿Cómo uso el argumento colClasses? ¿Sería capaz de darme el comando de una línea para importar este archivo correctamente usando el argumento colClasses? – Vivi