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]]