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