Pedro Concejero Cerezo
2014-Aug-26 09:37 UTC
[R-es] problema con campos que tienen formato fecha
(deliberadamente sin acentos porque "pasan cosas raras")
Hola, Angela,
En tu codigo no observo ninguna conversion de tus datos de entrada a fechas.
Lo mas habitual es tener la fecha con o sin hora con formato cadena, con los
digitos separados por espacio, "-" o "/".
No hace falta que cargues lubridate para leer o convertir fechas. Hay dos
funciones en el base, as.Date y as.POSIXct
A continuación un ejemplito, solo resaltar que si el formato es estandar con
as.POSIXct no tienes que hacer practicamente nada, y si no tienes que decirle a
la funcion que formato tiene tu fecha. Para esto yo siempre acudo a la estupenda
reference card
http://cran.r-project.org/doc/contrib/Short-refcard.pdf
(segunda pagina a la derecha)
Espero que sea útil!
Pedro
# Ejemplo conversión cadenas a fechas
# 1 con as.Date
cadena_fecha1 <- "2011-03-27 01:30:00"
cadena_fecha2 <- "31/10/2010 01:30:00"
fecha1 <- as.Date(cadena_fecha1, "%Y-%m-%d %H:%M:%S")
fecha1; class(fecha1)
fecha2 <- as.Date(cadena_fecha2, "%d/%m/%Y %H:%M:%S")
fecha2; class(fecha2)
fecha3 <- fecha1 - fecha2
fecha3; class(fecha3)
# 2 con as.POSIXct
fecha1 <- as.POSIXct(cadena_fecha1) # Sin opciones porque tiene formato
estandar yyyy-mm-dd
fecha1; class(fecha1)
fecha2 <- as.POSIXct(cadena_fecha2)
fecha2; class(fecha2) # Sale mal porque toma estandar de fecha inglesa
fecha2 <- as.POSIXct(cadena_fecha2, "%d/%m/%Y %H:%M:%S")
fecha2; class(fecha2) # Sale mal porque no sabe la zona horaria -ejemplo tomado
de ?as.POSIXct
fecha2 <- as.POSIXct(cadena_fecha2, "%d/%m/%Y %H:%M:%S", tz =
"CET")
fecha2; class(fecha2) # Ahora sí sale bien
fecha3 <- fecha1 - fecha2
fecha3; class(fecha3)
El 26/08/2014 2:19, r-help-es-request en
r-project.org<mailto:r-help-es-request en r-project.org> escribió:
BASE <- read.table("Todos2014.txt", header = TRUE, sep =
"\t")
#attach (BASE)
dim (BASE)
#library (lubridate)
#convertir a formato de fecha y hora
BASE <- cbind (BASE, (dmy_hms(paste(BASE$Date,BASE$Time,sep=" "))))
names (BASE)[12]<-"Time2"
#empieza rutina para calcular duraci?e visitas
visitas <- data.frame ()
n<-1
narbol <- 1
while (n <= dim(BASE)[1]) {
m = n
if (n < dim (BASE)[1]) {
while (BASE$Registro[m+1] == "FALSE" & m+1 <= dim(BASE)[1])
{m=m+1}
if (m+1 == dim (BASE)[1] & BASE$Registro[m+1]== "FALSE")
{m+1}}
if (m == n) { (visitas[narbol,1]<-0) }
else
{visitas[narbol,1]<-(BASE$Time2[m]-BASE$Time2[n])}
visitas[narbol,2]<-BASE$SpeciesID[n]
visitas[narbol,3]<-BASE$StationID[n]
visitas[narbol,4]<-BASE$Time2[n]
visitas[narbol,5]<-BASE$Time2[m]
narbol <- narbol + 1
n = m+1
}
colnames (visitas) <- c("Duracion", "Mammal",
"Arbol", "FechaI", "FechaF")
--
Pedro Concejero
BI & Big Data - Internal Exploitation - Telefónica
I+D<http://www.tid.es>
E-mail: pedro.concejerocerezo en telefonica.com<mailto:pedro.concejerocerezo
en telefonica.com>
skype: pedro.concejero
twitter @ConcejeroPedro<https://twitter.com/ConcejeroPedro>
linkedin pedroconcejero<http://www.linkedin.com/in/pedroconcejero/es>
Únete a la lista R en
español<https://stat.ethz.ch/mailman/listinfo/r-help-es#%21> y a tu gRupo
local R, el mío es el gRupo R madRid
<http://r-es.org/Grupo+de+Inter%C3%A9s+Local+de+Madrid+-+GIL+Madrid&structure=Comunidad>
________________________________
Este mensaje y sus adjuntos se dirigen exclusivamente a su destinatario, puede
contener información privilegiada o confidencial y es para uso exclusivo de la
persona o entidad de destino. Si no es usted. el destinatario indicado, queda
notificado de que la lectura, utilización, divulgación y/o copia sin
autorización puede estar prohibida en virtud de la legislación vigente. Si ha
recibido este mensaje por error, le rogamos que nos lo comunique inmediatamente
por esta misma vía y proceda a su destrucción.
The information contained in this transmission is privileged and confidential
information intended only for the use of the individual or entity named above.
If the reader of this message is not the intended recipient, you are hereby
notified that any dissemination, distribution or copying of this communication
is strictly prohibited. If you have received this transmission in error, do not
read it. Please immediately reply to the sender that you have received this
communication in error and then delete it.
Esta mensagem e seus anexos se dirigem exclusivamente ao seu destinatário, pode
conter informação privilegiada ou confidencial e é para uso exclusivo da pessoa
ou entidade de destino. Se não é vossa senhoria o destinatário indicado, fica
notificado de que a leitura, utilização, divulgação e/ou cópia sem autorização
pode estar proibida em virtude da legislação vigente. Se recebeu esta mensagem
por erro, rogamos-lhe que nos o comunique imediatamente por esta mesma via e
proceda a sua destruição
[[alternative HTML version deleted]]
Angela Andrea Camargo Sanabria
2014-Aug-27 20:01 UTC
[R-es] problema con campos que tienen formato fecha
Gracias por los comentarios. Finalmente combiné el uso de la función difftime con el de vectores para guardr cada jna de mis variables con su formato particular. Saludos, El martes, 26 de agosto de 2014, Pedro Concejero Cerezo < pedro.concejerocerezo en telefonica.com> escribió:> (deliberadamente sin acentos porque "pasan cosas raras") > Hola, Angela, > En tu codigo no observo ninguna conversion de tus datos de entrada a > fechas. > Lo mas habitual es tener la fecha con o sin hora con formato cadena, con > los digitos separados por espacio, "-" o "/". > No hace falta que cargues lubridate para leer o convertir fechas. Hay dos > funciones en el base, as.Date y as.POSIXct > A continuación un ejemplito, solo resaltar que si el formato es estandar > con as.POSIXct no tienes que hacer practicamente nada, y si no tienes que > decirle a la funcion que formato tiene tu fecha. Para esto yo siempre acudo > a la estupenda reference card > http://cran.r-project.org/doc/contrib/Short-refcard.pdf > (segunda pagina a la derecha) > > Espero que sea útil! > Pedro > > # Ejemplo conversión cadenas a fechas > # 1 con as.Date > > cadena_fecha1 <- "2011-03-27 01:30:00" > cadena_fecha2 <- "31/10/2010 01:30:00" > > fecha1 <- as.Date(cadena_fecha1, "%Y-%m-%d %H:%M:%S") > fecha1; class(fecha1) > > fecha2 <- as.Date(cadena_fecha2, "%d/%m/%Y %H:%M:%S") > fecha2; class(fecha2) > > fecha3 <- fecha1 - fecha2 > fecha3; class(fecha3) > > # 2 con as.POSIXct > > fecha1 <- as.POSIXct(cadena_fecha1) # Sin opciones porque tiene formato > estandar yyyy-mm-dd > fecha1; class(fecha1) > > fecha2 <- as.POSIXct(cadena_fecha2) > fecha2; class(fecha2) # Sale mal porque toma estandar de fecha inglesa > fecha2 <- as.POSIXct(cadena_fecha2, "%d/%m/%Y %H:%M:%S") > fecha2; class(fecha2) # Sale mal porque no sabe la zona horaria -ejemplo > tomado de ?as.POSIXct > fecha2 <- as.POSIXct(cadena_fecha2, "%d/%m/%Y %H:%M:%S", tz = "CET") > fecha2; class(fecha2) # Ahora sí sale bien > > fecha3 <- fecha1 - fecha2 > fecha3; class(fecha3) > > > > El 26/08/2014 2:19, r-help-es-request en r-project.org <javascript:;><mailto: > r-help-es-request en r-project.org <javascript:;>> escribió: > > BASE <- read.table("Todos2014.txt", header = TRUE, sep = "\t") > #attach (BASE) > dim (BASE) > > #library (lubridate) > > #convertir a formato de fecha y hora > BASE <- cbind (BASE, (dmy_hms(paste(BASE$Date,BASE$Time,sep=" ")))) > > names (BASE)[12]<-"Time2" > > #empieza rutina para calcular duraci?e visitas > visitas <- data.frame () > > n<-1 > narbol <- 1 > > while (n <= dim(BASE)[1]) { > m = n > if (n < dim (BASE)[1]) { > while (BASE$Registro[m+1] == "FALSE" & m+1 <= dim(BASE)[1]) {m=m+1} > if (m+1 == dim (BASE)[1] & BASE$Registro[m+1]== "FALSE") {m+1}} > > if (m == n) { (visitas[narbol,1]<-0) } > else > {visitas[narbol,1]<-(BASE$Time2[m]-BASE$Time2[n])} > visitas[narbol,2]<-BASE$SpeciesID[n] > visitas[narbol,3]<-BASE$StationID[n] > visitas[narbol,4]<-BASE$Time2[n] > visitas[narbol,5]<-BASE$Time2[m] > > narbol <- narbol + 1 > n = m+1 > } > > colnames (visitas) <- c("Duracion", "Mammal", "Arbol", "FechaI", "FechaF") > > > > -- > Pedro Concejero > BI & Big Data - Internal Exploitation - Telefónica I+D<http://www.tid.es> > E-mail: pedro.concejerocerezo en telefonica.com <javascript:;><mailto: > pedro.concejerocerezo en telefonica.com <javascript:;>> > skype: pedro.concejero > twitter @ConcejeroPedro<https://twitter.com/ConcejeroPedro> > linkedin pedroconcejero<http://www.linkedin.com/in/pedroconcejero/es> > Únete a la lista R en español< > https://stat.ethz.ch/mailman/listinfo/r-help-es#%21> y a tu gRupo local > R, el mío es el gRupo R madRid < > http://r-es.org/Grupo+de+Inter%C3%A9s+Local+de+Madrid+-+GIL+Madrid&structure=Comunidad > > > > ________________________________ > > Este mensaje y sus adjuntos se dirigen exclusivamente a su destinatario, > puede contener información privilegiada o confidencial y es para uso > exclusivo de la persona o entidad de destino. Si no es usted. el > destinatario indicado, queda notificado de que la lectura, utilización, > divulgación y/o copia sin autorización puede estar prohibida en virtud de > la legislación vigente. Si ha recibido este mensaje por error, le rogamos > que nos lo comunique inmediatamente por esta misma vía y proceda a su > destrucción. > > The information contained in this transmission is privileged and > confidential information intended only for the use of the individual or > entity named above. If the reader of this message is not the intended > recipient, you are hereby notified that any dissemination, distribution or > copying of this communication is strictly prohibited. If you have received > this transmission in error, do not read it. Please immediately reply to the > sender that you have received this communication in error and then delete > it. > > Esta mensagem e seus anexos se dirigem exclusivamente ao seu destinatário, > pode conter informação privilegiada ou confidencial e é para uso exclusivo > da pessoa ou entidade de destino. Se não é vossa senhoria o destinatário > indicado, fica notificado de que a leitura, utilização, divulgação e/ou > cópia sem autorização pode estar proibida em virtude da legislação vigente. > Se recebeu esta mensagem por erro, rogamos-lhe que nos o comunique > imediatamente por esta mesma via e proceda a sua destruição > > [[alternative HTML version deleted]] > >-- Enviado con Gmail Mobile [[alternative HTML version deleted]]