2012-02-21 31 views
15

Estoy trabajando en R y leyendo csv que tiene fecha y hora en su primera columna. Quiero importar este archivo csv en R primero y luego convertirlo a zoo obect.Lectura de csv con fecha y hora

Estoy utilizando el código en R

EURUSD <- as.xts(read.zoo("myfile.csv",sep=",",tz="",header=T)) 

Mi archivo CSV contienen datos en el formato:

Date,Open,Low,High,Close 
2006-01-02 10:01:00,2822.9,2825.45,2822.1,2824.9 
2006-01-02 10:02:00,2825,2825.9,2824,2824.95 
2006-01-02 10:03:00,2824.55,2826.45,2824,2826.45 
2006-01-02 10:04:00,2826.45,2826.45,2824.9,2825.5 
2006-01-02 10:05:00,2825.15,2825.5,2824,2824.85 
2006-01-02 10:06:00,2824.7,2825.5,2823.7,2823.8 
2006-01-02 10:07:00,2823.95,2824.45,2823.55,2824 
2006-01-02 10:08:00,2824,2824.85,2823.5,2824.85 
2006-01-02 10:09:00,2824.25,2825.45,2824,2825.45 
2006-01-02 10:10:00,2825.2,2827,2825,2827 

Cuando ejecuto el comando anterior para importar los datos a RI obtener el folowwwing error:

Error in as.POSIXlt.character(x, tz, ...) : 
    character string is not in a standard unambiguous format 

Traté de encontrar todas las formas de resolver el problema. Leo tantos blogs en la red, pero ninguno de los métodos funciona para mí.

Espero que alguien me ayude.

+1

Parece que hay algo en su columna de fecha que lo está molestando. Probablemente un espacio en blanco, "-", ",", "n.a." o algo así. –

+0

¿Estás seguro de que tu 'sep' es una coma?¿su formato de archivo csv de ejemplo se parece a su pestaña? –

+0

Se separa por comas. Abrí mi archivo csv en el bloc de notas y muestra claramente una coma separada – user395882

Respuesta

5

Parece que el error se debe a que R no reconoce en qué formato se encuentra su columna de fecha (no puede funcionar: fecha, mes, año, mes, fecha, año, etc.).

Puede decirle a R el formato con el argumento format al read.zoo (consulte ?strptime para ver los especificadores que puede usar).

Por ejemplo, si fue día/mes/año hora (reloj de 24 horas): minutos, usted podría hacer:

EURUSD <- as.xts(read.zoo(file_name, 
          sep=',', 
          tz='', 
          header=T, 
          format='%d/%m/%Y %H:%M:%S')) # see the 'format' argument? 

(Nota - en su pregunta el fragmento de los datos CSV que mostró ISN 't comma-delimited).

+0

Intenté usar read.zoo ("C: /Users/ParamJeet/Desktop/test/eurusd.csv", sep = ",", tz = "", format = " % Y-% m-% d% H:% M ", encabezado = T) pero me da error: Error en read.zoo (" C: /Users/ParamJeet/Desktop/test/eurusd.csv ", sep = ",",: El índice tiene 13428 entradas incorrectas en filas de datos: 323559 323560 323561 323562 323563 – user395882

+0

Luego eche un vistazo a esos r Está bien en ti csv - mi suposición es que tienen un formato diferente. –

+0

si abro mi bloc de notas parece Fecha, Abierto, Bajo, Alto, Cerrar 2006-01-02 10: 01: 00,2822.9,2825.45,2822.1,2824.9 si abro en datos de Excel se ve como Fecha \t Abierto \t Bajo \t alta \t Cerrar 1/2/2006 10:01 \t 2822,9 \t 2825,45 \t 2822,1 \t 2824,9 1/2/2006 10:02 2825,9 2824,95 esta pensar esta diferencia la causa del problema. – user395882

8

Aunque esta parece ser una publicación anterior, pero quiero compartir mi experiencia ya que pasé por un proceso similar muy frustrante tratando de cargar datos de serie de tiempo de csv en R. El problema anterior es que Excel cambia el formato de la fecha y la hora a la siguiente %m/%d/%Y %H:%M, básicamente, deja caer los segundos. Si lee un archivo con este formato y tiene una segunda información de resolución, obtendrá múltiples combinaciones de fecha y hora que son similares. por lo que no puede simplemente usar el formato que ignora los segundos porque da el siguiente mensaje de error. "cadena de caracteres no está en un formato no ambiguo estándar"

La solución es volver a sobresalir y cambiar el formato de la columna de fecha y hora para que sea %m/%d/%Y %H:%M:%S. Puede hacerlo seleccionando los formatos predeterminados de fecha y hora más próximos al formato deseado (en este caso es %m/%d/%Y %H:%M y luego agregue manualmente :ss al final. Guarde el archivo como un archivo csv y léalo con el siguiente comando:

Data<-read.zoo("file.csv", tz="", header=TRUE,format='%m/%d/%Y %H:%M:%S') 

Esto funcionó para mí y leer un archivo que tiene alrededor de 900 K filas.

0

leer el archivo sin utilizar as.xtc, cuando la columna de la fecha es como un personaje. y luego convertir las fechas a la clase POSIXlt con esta función:

library("chron") 
DateConvert<-function(x){ 
    dt<-strsplit(x,split = "T") 
    dt<-unlist(dt) 
    d1<-dt[1:length(dt) %% 2==1 ] 
    d2<-dt[1:length(dt) %% 2==0 ] 
    a<-as.POSIXlt(chron(dates.=d1, times.=d2, format = c(dates = "y-m-d", times = "h:m:s"))) 
    return(a) 
} 

DateConvert('Your column') 

y en ese momento use la función como.xts en sus datos.

Cuestiones relacionadas