Buenas, esta pregunta es un poco elemental, pero estoy haciendo mis primeras experiencias en R. Yo tengo un CSV con el siguiente formato... fecha;Gastos;media móvil;Holt Winter 31/08/02;2498,5;;2498,5 29/09/02;2250,93;2320,63;2424,229 31/10/02;2212,46;2097,87;2360,6983 30/11/02;1830,22;2092,78;2201,55481 ,,,,,,, los guardo en un dataframe con gastos=read.csv2("indice_gastos.csv"), ahora bien no sé como hace R pero guarda el primer campo como numérico,,,> mode(gastos$fecha)[1] "numeric" y no como el formato de fecha día/mes/año,,, entonces como puedo convertir dentro del dataframe gastos$fecha al tipo de datos fecha, o date o como se llame de tal manera que cuando haga el grafo plot(Gastos~fecha,data=gastos) salga como corresponda y no un chirimbolo como me parece,,, Saludos Horacio
javier.ruben.marcuzzi en gmail.com
2016-Dec-29 20:54 UTC
[R-es] Conversión de datos a fechas
Estimado Horacio Hay varias formas, si esta en sus primeros pasos en http://www.statmethods.net/input/dates.html hay una alternativa, algo más elevado por si la primera no funciona en https://www.stat.berkeley.edu/~s133/dates.html , luego hay librerías que facilitan el trabajo. Yo pase por varios problemas, mi solución fue por ejemplo: mydate = strptime('16/Oct/2005:07:51:00',format='%d/%b/%Y:%H:%M:%S') Pero al trabajar con fechas hay mucho de base de datos, sistemas operativos, luego R, los números y letras tienen menos dificultades cuándo los datos tienen distintas fuentes. No hay una solución universal, puede ser que https://cran.r-project.org/web/packages/lubridate/index.html solucione muchos problemas, pero no lo se. Javier Rubén Marcuzzi De: Horacio Enviado: jueves, 29 de diciembre de 2016 17:27 Para: r-help-es en r-project.org Asunto: [R-es] Conversión de datos a fechas Buenas, esta pregunta es un poco elemental, pero estoy haciendo mis primeras experiencias en R. Yo tengo un CSV con el siguiente formato... fecha;Gastos;media móvil;Holt Winter 31/08/02;2498,5;;2498,5 29/09/02;2250,93;2320,63;2424,229 31/10/02;2212,46;2097,87;2360,6983 30/11/02;1830,22;2092,78;2201,55481 ,,,,,,, los guardo en un dataframe con gastos=read.csv2("indice_gastos.csv"), ahora bien no sé como hace R pero guarda el primer campo como numérico,,,> mode(gastos$fecha)[1] "numeric" y no como el formato de fecha día/mes/año,,, entonces como puedo convertir dentro del dataframe gastos$fecha al tipo de datos fecha, o date o como se llame de tal manera que cuando haga el grafo plot(Gastos~fecha,data=gastos) salga como corresponda y no un chirimbolo como me parece,,, Saludos Horacio _______________________________________________ R-help-es mailing list R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es [[alternative HTML version deleted]]
Hola, Puedes hacerlo entre otras formas así: library(lubridate) gastos$fecha <- dmy(gastos$fecha) Saludos, Carlos Ortega www.qualityexcellence.es El 29 de diciembre de 2016, 21:27, Horacio <horacio9573 en gmail.com> escribió:> Buenas, esta pregunta es un poco elemental, pero estoy haciendo mis > primeras experiencias en R. > > Yo tengo un CSV con el siguiente formato... > > fecha;Gastos;media móvil;Holt Winter > 31/08/02;2498,5;;2498,5 > 29/09/02;2250,93;2320,63;2424,229 > 31/10/02;2212,46;2097,87;2360,6983 > 30/11/02;1830,22;2092,78;2201,55481 > ,,,,,,, > > los guardo en un dataframe con gastos=read.csv2("indice_gastos.csv"), > ahora bien no sé como hace R pero guarda el primer campo como > numérico,,, > > > mode(gastos$fecha) > [1] "numeric" > > y no como el formato de fecha día/mes/año,,, entonces como puedo > convertir dentro del dataframe gastos$fecha al tipo de datos fecha, o > date o como se llame de tal manera que cuando haga el grafo > > plot(Gastos~fecha,data=gastos) > > salga como corresponda y no un chirimbolo como me parece,,, > > Saludos Horacio > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Hola a todos. A las soluciones de Javier y de Carlos añadiria: 1. Cargar los datos en R con el paquete "readr" y la orden "read_csv2" (fijate que en vez de un punto es un guión bajo). De esta manera la variable fecha ya estará en formato POSIXct (formato fecha), ya que esta orden "adivina" los tipos de datos de cada columna. 2. Si transformas la fecha con lubridate y "dmy" como sugiere Carlos, te transformará las fechas con la zona horaria de tu sistema. Si coincide con la de los datos no hay problema pero si es distinta (tu sistema esta configurado con la zona horaria de España y los datos son de Canada por ejemplo) deberías indicarselo con el argumento "tz" de la orden "dmy". Puede parecer una tontería pero ultimamente estoy trabajando con series temporales de diferentes paises de todo el mundo y como no tengas cuidado con las zonas horarias el lio puede ser tremendo!!! Espero que te sirva, un saludo!! El jue., 29 dic. 2016 22:11, Carlos Ortega <cof en qualityexcellence.es> escribió: Hola, Puedes hacerlo entre otras formas así: library(lubridate) gastos$fecha <- dmy(gastos$fecha) Saludos, Carlos Ortega www.qualityexcellence.es El 29 de diciembre de 2016, 21:27, Horacio <horacio9573 en gmail.com> escribió:> Buenas, esta pregunta es un poco elemental, pero estoy haciendo mis > primeras experiencias en R. > > Yo tengo un CSV con el siguiente formato... > > fecha;Gastos;media móvil;Holt Winter > 31/08/02;2498,5;;2498,5 > 29/09/02;2250,93;2320,63;2424,229 > 31/10/02;2212,46;2097,87;2360,6983 > 30/11/02;1830,22;2092,78;2201,55481 > ,,,,,,, > > los guardo en un dataframe con gastos=read.csv2("indice_gastos.csv"), > ahora bien no sé como hace R pero guarda el primer campo como > numérico,,, > > > mode(gastos$fecha) > [1] "numeric" > > y no como el formato de fecha día/mes/año,,, entonces como puedo > convertir dentro del dataframe gastos$fecha al tipo de datos fecha, o > date o como se llame de tal manera que cuando haga el grafo > > plot(Gastos~fecha,data=gastos) > > salga como corresponda y no un chirimbolo como me parece,,, > > Saludos Horacio > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es -- *Víctor Granda García* Tècnic v.granda en creaf.uab.cat Tel. +34 93 581 33 45 Campus UAB. Edifici C. 08193 Bellaterra (Barcelona) | *www.creaf.cat* <http://www.creaf.uab.es/cat/index.htm> Abans d'imprimir aquest missatge electrònic penseu en el medi ambient. [[alternative HTML version deleted]]
Hola, Con esto de las fechas, la verdad es que hay múltiples alternativas. Por comentar algunas otras más: + as.Date() - Con esta opción no hace falta cargar ningún paquete. - Es una función a usar cuando tu columna de fechas es homogénea. - Si el formato de tus fechas es homogénea también el paquete "chron" (función dates()) te ayuda en la conversión. - Además de as.Date() y strptime, tienes otras como as.POSIXct() y as.POSIXlt() - La función se usaría así: - gastos$fecha <- as.Date(gastos$fecha , "%d%m%y") + anytime() - Es una función de un nuevo paquete de Dirk Eddelbuettel (anytime). - La ventaja de este paquete es que si tus fechas tienen codificaciones muy diferentes: dmy, ymd, ... es capaz de "adivinar" los formatos automáticamente. - Esta ventaja también la tiene las funciones del paquete "lubridate". Antes de realizar la conversión a formato fecha, lee un número grande de líneas y convierte al formato más común. - "lubridate()" tiene la ventaja de que luego extraer los días, meses, años, semanas, días de la semana es muy sencillo. - La función se usaría así: - gastos$fecha <- anytime(gastos$fecha) Sobre el tema de la zona horaria: "tz". - Todas las funciones de fecha tienen este parámetro para que puedas definir tu zona horaria. Todas las que estamos comentando en estas diferentes soluciones: strptime, dmy, as.Date, anytime, etc. - También lo incluye la función del paquete "readr" (read_csv2). Internamente tiene un parámetro "locale" con un valor por defecto, pero que puedes/debes modificar para definir tu zona horaria. ¡Feliz Año! Carlos Ortega www.qualityexcellence.es El 29 de diciembre de 2016, 21:27, Horacio <horacio9573 en gmail.com> escribió:> Buenas, esta pregunta es un poco elemental, pero estoy haciendo mis > primeras experiencias en R. > > Yo tengo un CSV con el siguiente formato... > > fecha;Gastos;media móvil;Holt Winter > 31/08/02;2498,5;;2498,5 > 29/09/02;2250,93;2320,63;2424,229 > 31/10/02;2212,46;2097,87;2360,6983 > 30/11/02;1830,22;2092,78;2201,55481 > ,,,,,,, > > los guardo en un dataframe con gastos=read.csv2("indice_gastos.csv"), > ahora bien no sé como hace R pero guarda el primer campo como > numérico,,, > > > mode(gastos$fecha) > [1] "numeric" > > y no como el formato de fecha día/mes/año,,, entonces como puedo > convertir dentro del dataframe gastos$fecha al tipo de datos fecha, o > date o como se llame de tal manera que cuando haga el grafo > > plot(Gastos~fecha,data=gastos) > > salga como corresponda y no un chirimbolo como me parece,,, > > Saludos Horacio > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Agradezco la ayuda recibida me vino muy bien,,, el problema de instalar el paquete lubridate es que no está en los repositorios de Debian,,, al usar RStudio creo que se debe instalar en ~/R/x86_64-pc-linux-gnu-library previa compilación de fuente bajada de r-cran,,, cosa que será otro pedido de ayuda en el futuro si sale mal,,, Saludos Horacio El día 30 de diciembre de 2016, 7:05, Carlos Ortega <cof en qualityexcellence.es> escribió:> Hola, > > Con esto de las fechas, la verdad es que hay múltiples alternativas. > Por comentar algunas otras más: > > + as.Date() > > Con esta opción no hace falta cargar ningún paquete. > Es una función a usar cuando tu columna de fechas es homogénea. > > Si el formato de tus fechas es homogénea también el paquete "chron" (función > dates()) te ayuda en la conversión. > > Además de as.Date() y strptime, tienes otras como as.POSIXct() y > as.POSIXlt() > La función se usaría así: > > gastos$fecha <- as.Date(gastos$fecha , "%d%m%y") > > > + anytime() > > Es una función de un nuevo paquete de Dirk Eddelbuettel (anytime). > La ventaja de este paquete es que si tus fechas tienen codificaciones muy > diferentes: dmy, ymd, ... es capaz de "adivinar" los formatos > automáticamente. > > Esta ventaja también la tiene las funciones del paquete "lubridate". Antes > de realizar la conversión a formato fecha, lee un número grande de líneas y > convierte al formato más común. > "lubridate()" tiene la ventaja de que luego extraer los días, meses, años, > semanas, días de la semana es muy sencillo. > > La función se usaría así: > > gastos$fecha <- anytime(gastos$fecha) > > > Sobre el tema de la zona horaria: "tz". > > Todas las funciones de fecha tienen este parámetro para que puedas definir > tu zona horaria. Todas las que estamos comentando en estas diferentes > soluciones: strptime, dmy, as.Date, anytime, etc. > También lo incluye la función del paquete "readr" (read_csv2). Internamente > tiene un parámetro "locale" con un valor por defecto, pero que puedes/debes > modificar para definir tu zona horaria. > > > > ¡Feliz Año! > Carlos Ortega > www.qualityexcellence.es > > El 29 de diciembre de 2016, 21:27, Horacio <horacio9573 en gmail.com> escribió: >> >> Buenas, esta pregunta es un poco elemental, pero estoy haciendo mis >> primeras experiencias en R. >> >> Yo tengo un CSV con el siguiente formato... >> >> fecha;Gastos;media móvil;Holt Winter >> 31/08/02;2498,5;;2498,5 >> 29/09/02;2250,93;2320,63;2424,229 >> 31/10/02;2212,46;2097,87;2360,6983 >> 30/11/02;1830,22;2092,78;2201,55481 >> ,,,,,,, >> >> los guardo en un dataframe con gastos=read.csv2("indice_gastos.csv"), >> ahora bien no sé como hace R pero guarda el primer campo como >> numérico,,, >> >> > mode(gastos$fecha) >> [1] "numeric" >> >> y no como el formato de fecha día/mes/año,,, entonces como puedo >> convertir dentro del dataframe gastos$fecha al tipo de datos fecha, o >> date o como se llame de tal manera que cuando haga el grafo >> >> plot(Gastos~fecha,data=gastos) >> >> salga como corresponda y no un chirimbolo como me parece,,, >> >> Saludos Horacio >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es