¿Cómo leer en números con una coma como separador decimal?

Tengo una serie de archivos CSV donde los números se formatean al estilo europeo usando comas en lugar de puntos decimales, es decir, 0,5 lugar de 0.5 .

Hay demasiados de estos archivos para editarlos antes de importarlos a R. Esperaba que haya un parámetro fácil para la función read.csv() o un método para aplicar al conjunto de datos extraído para que R trate los datos como un número en lugar de una cadena.

Cuando revises ?read.table , probablemente encontrarás toda la respuesta que necesitas.

Hay dos problemas con los archivos csv europeos (continentales):

  1. ¿Qué significa c en csv? Para csv estándar esto es a,, para csv europeo esto es a ;
    sep es el argumento correspondiente en read.table
  2. ¿Cuál es el caracter para el punto decimal? Para csv estándar esto es a . , para csv europeo esto es a ,
    dec es el argumento correspondiente en read.table

Para leer el csv estándar, use read.csv , para leer el csv europeo use read.csv2 . Estas dos funciones son solo envoltorios para read.table que establece los argumentos apropiados.

Si su archivo no sigue ninguno de estos estándares, establezca los argumentos manualmente.

Desde ?read.table :

 dec the character used in the file for decimal points. 

Y sí, también puedes usar eso para read.csv . (Para mí: ¡no es estúpido, no puedes!)

Alternativamente, también puedes usar

 read.csv2 

que asume un separador decimal “,” y un “;” para separadores de columnas.

 read.csv(... , sep=";") 

Supongamos que este campo importado se llama “cantidad”, puede corregir el tipo de esta manera si sus números se leen como caracteres:

 d$amount <- sub(",",".",d$amount) d$amount <- as.numeric(d$amount) 

Esto me sucede frecuentemente junto con un montón de otras pequeñas molestias cuando importo desde excel o excel csv. Como parece que no hay una forma consistente de garantizar que obtenga lo que espera al importar a R, los arreglos post-hoc parecen ser el mejor método. Con eso me refiero a MIRAR lo que importaste: asegúrate de que sea lo que esperabas y corrígelo si no es así.

tal vez

 as.is=T 

esto también evita convertir las columnas de caracteres en factores

puede ser utilizado de la siguiente manera:

mydata <- read.table (fileIn, dec = ",")

archivo de entrada (fileIn):

D: \ TEST> más input2.txt

06-05-2014 09:19:38 3,182534 0

06-05-2014 09:19:51 4,2311 0

Los problemas también pueden resolverse si indica cómo se representan los valores que faltan (na.strings = …). Por ejemplo, V1 y V2 tienen el mismo formato (decimales separados por “,” en el archivo csv), pero como las NA están presentes en V1, se interpreta como factor:

 dat <- read.csv2("...csv", header=TRUE) head(dat) > ID x time V1 V2 > 1 1 0:01:00 0,237 0.621 > 2 1 0:02:00 0,242 0.675 > 3 1 0:03:00 0,232 0.398 dat <- read.csv2("...csv", header=TRUE, na.strings="---") head(dat) > ID x time V1 V2 > 1 1 0:01:00 0.237 0.621 > 2 1 0:02:00 0.242 0.675 > 3 1 0:03:00 0.232 0.398 

Solo para agregar a la respuesta anterior de Brandon, que funcionó bien para mí (no tengo suficiente representante para comentar):

Si estás usando

  d$amount <- sub(",",".",d$amount) d$amount <- as.numeric(d$amount) 

no olvide que puede necesitar sub("[.]", "", d$amount, perl=T) para moverse por el . personaje.