Hola a tod@s, Me han mandado una base de datos y al abrirla me he encontrado con la fecha y la hora en el siguiente formato: FECHA HORA 20121007 1206 20110622 1854 20110623 054 He conseguido que la Fecha me quedara en el formato dd/mm/aaaa mediante el script db[, "FECHA"] <- as.Date(as.character(db[, "FECHA"]),format = "%Y%m%d") Sin embargo, con la hora todavía no he dado con la forma. Se me está pasando algo por alto y no doy con ello ¿Alguna idea? Un saludo y Gracias Juan Carlos *************************************** Si las cuerdas del trapecio las corté fue para subir y atarlas y ver a la luna otra vez. Y volverlas a cortar una y mil veces y boquear como los peces cuando les toca perder. [[alternative HTML version deleted]]
Hola Juan Carlos. Te vale algo así?> HORA=c("1206","1854","054") > hora=strptime(HORA,format="%H%M") > hora[1] "2013-03-07 12:06:00" "2013-03-07 18:54:00" "2013-03-07 05:04:00" Un Saludo, _____________________________ Miguel Ángel Rodríguez Muíños Dirección Xeral de Innovación e Xestión da Saúde Pública Consellería de Sanidade Xunta de Galicia http://dxsp.sergas.es -----Mensaje original----- De: r-help-es-bounces en r-project.org [mailto:r-help-es-bounces en r-project.org] En nombre de JC A Enviado el: jueves, 07 de marzo de 2013 13:04 Para: r-help-es en r-project.org Asunto: [R-es] Convertir eh hora Hola a tod en s, Me han mandado una base de datos y al abrirla me he encontrado con la fecha y la hora en el siguiente formato: FECHA HORA 20121007 1206 20110622 1854 20110623 054 He conseguido que la Fecha me quedara en el formato dd/mm/aaaa mediante el script db[, "FECHA"] <- as.Date(as.character(db[, "FECHA"]),format = "%Y%m%d") Sin embargo, con la hora todavía no he dado con la forma. Se me está pasando algo por alto y no doy con ello ¿Alguna idea? Un saludo y Gracias Juan Carlos *************************************** Si las cuerdas del trapecio las corté fue para subir y atarlas y ver a la luna otra vez. Y volverlas a cortar una y mil veces y boquear como los peces cuando les toca perder. [[alternative HTML version deleted]] Nota: A información contida nesta mensaxe e os seus posibles documentos adxuntos é privada e confidencial e está dirixida únicamente ó seu destinatario/a. Se vostede non é o/a destinatario/a orixinal desta mensaxe, por favor elimínea. A distribución ou copia desta mensaxe non está autorizada. Nota: La información contenida en este mensaje y sus posibles documentos adjuntos es privada y confidencial y está dirigida únicamente a su destinatario/a. Si usted no es el/la destinatario/a original de este mensaje, por favor elimínelo. La distribución o copia de este mensaje no está autorizada. See more languages: http://www.sergas.es/aviso_confidencialidad.htm
Hola Miguel, El problema es que el campo hora me incluye la fecha y yo solo necesito la hora. Una opción sería crear campos temporales y de ahí quedarme con la hora y eliminar la fecha. Pero me gustaría saber si existe una forma de hacerlo directamente, sin pasos intermedios. Un saludo JC> From: miguel.angel.rodriguez.muinos@sergas.es > To: j_arronte@hotmail.com; r-help-es@r-project.org > Date: Thu, 7 Mar 2013 13:16:46 +0100 > Subject: RE: [R-es] Convertir eh hora > > Hola Juan Carlos. > > > Te vale algo así? > > > HORA=c("1206","1854","054") > > hora=strptime(HORA,format="%H%M") > > hora > [1] "2013-03-07 12:06:00" "2013-03-07 18:54:00" "2013-03-07 05:04:00" > > > Un Saludo, > _____________________________ > Miguel Ángel Rodríguez Muíños > Dirección Xeral de Innovación e Xestión da Saúde Pública > Consellería de Sanidade > Xunta de Galicia > http://dxsp.sergas.es >[[alternative HTML version deleted]]
Y así?> HORA=c("1206","1854","0540") > hora=substr(strptime(HORA,format="%H%M"),12,16) > hora[1] "12:06" "18:54" "05:40" Un Saludo, Miguel. De: JC A [mailto:j_arronte@hotmail.com] Enviado el: jueves, 07 de marzo de 2013 13:29 Para: Rodríguez Muíños, Miguel Ángel; r-help-es@r-project.org Asunto: RE: [R-es] Convertir eh hora Hola Miguel, El problema es que el campo hora me incluye la fecha y yo solo necesito la hora. Una opción sería crear campos temporales y de ahí quedarme con la hora y eliminar la fecha. Pero me gustaría saber si existe una forma de hacerlo directamente, sin pasos intermedios. Un saludo JC> From: miguel.angel.rodriguez.muinos@sergas.es<mailto:miguel.angel.rodriguez.muinos@sergas.es> > To: j_arronte@hotmail.com<mailto:j_arronte@hotmail.com>; r-help-es@r-project.org<mailto:r-help-es@r-project.org> > Date: Thu, 7 Mar 2013 13:16:46 +0100 > Subject: RE: [R-es] Convertir eh hora > > Hola Juan Carlos. > > > Te vale algo así? > > > HORA=c("1206","1854","054") > > hora=strptime(HORA,format="%H%M") > > hora > [1] "2013-03-07 12:06:00" "2013-03-07 18:54:00" "2013-03-07 05:04:00" > > > Un Saludo, > _____________________________ > Miguel Ángel Rodríguez Muíños > Dirección Xeral de Innovación e Xestión da Saúde Pública > Consellería de Sanidade > Xunta de Galicia > http://dxsp.sergas.es >________________________________ Nota: A información contida nesta mensaxe e os seus posibles documentos adxuntos é privada e confidencial e está dirixida únicamente ó seu destinatario/a. Se vostede non é o/a destinatario/a orixinal desta mensaxe, por favor elimínea. A distribución ou copia desta mensaxe non está autorizada. Nota: La información contenida en este mensaje y sus posibles documentos adjuntos es privada y confidencial y está dirigida únicamente a su destinatario/a. Si usted no es el/la destinatario/a original de este mensaje, por favor elimínelo. La distribución o copia de este mensaje no está autorizada. See more languages: http://www.sergas.es/aviso_confidencialidad.htm [[alternative HTML version deleted]]
Primero fijate si los datos respetan el ejemplo que enviastes (lugar de los años, meses, dias, horas y minutos, en especial la cantidad de dígitos para cada uno, para modificar la función si es necesario. A diferencia de Miguel supongo que en el ejemplo donde hora:minuto es 054, lo que representa es 0 horas y 54 minutos, si mi interpretación es incorrecta la solución de Miguel es la correcta..Si alguien puede contribuir con algo más genérico se agradecerá, pero para empezar esta es mi contribución x <- c('20121007 1206', '20110622 1854', '20110623 054') tiempo <- function(x) { xF <- as.POSIXlt( strptime(x, '%Y%m%d %H%M')) xT <- as.POSIXlt( strptime( paste(substr(x, 1, max(gregexpr(" ", x)[[1]])), 0, substr(x,max(gregexpr(" ", x)[[1]])+1,nchar( x)), sep=""), '%Y%m%d %H%M')) if((nchar(x)-max(gregexpr(" ", x)[[1]])) == 3) xT else xF } lapply(x, tiempo) Daniel Merino El día 7 de marzo de 2013 09:04, JC A <j_arronte en hotmail.com> escribió:> > > > Hola a tod en s, > > Me han mandado una base de datos y al abrirla me he encontrado con la fecha y la hora en el siguiente formato: > > > > FECHA HORA > > 20121007 1206 > > 20110622 1854 > > 20110623 054 > > > He conseguido que la Fecha me quedara en el formato dd/mm/aaaa mediante el script > > db[, "FECHA"] <- as.Date(as.character(db[, "FECHA"]),format = "%Y%m%d") > Sin embargo, con la hora todavía no he dado con la forma. Se me está pasando algo por alto y no doy con ello > > ¿Alguna idea? > > Un saludo y Gracias > > Juan Carlos > > > *************************************** > Si las cuerdas del trapecio las corté > fue para subir y atarlas > y ver a la luna otra vez. > Y volverlas a cortar una y mil veces > y boquear como los peces cuando les toca perder. > > > [[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 >-- Daniel
Hola, Otra opción es con el paquete "lubridate". Con la función "ymd_hms()" que prueba varias opciones hasta encontrar la recurrencia del formato. Con solo una función se resuelve:> library(lubridate) > x <- c(''20121007 1206'', ''20110622 1854'',+ ''20110623 054'')> > ymd_hms(x)3 parsed with %y%m%d%H %M%S [1] "2020-12-10 07:12:06 UTC" "2020-11-06 22:18:54 UTC" "2020-11-06 23:05:04 UTC" Saludos, Carlos Ortega www.qualityexcellence.es El 7 de marzo de 2013 13:48, daniel <daniel319@gmail.com> escribió:> Primero fijate si los datos respetan el ejemplo que enviastes (lugar > de los años, meses, dias, horas y minutos, en especial la cantidad de > dígitos para cada uno, para modificar la función si es necesario. A > diferencia de Miguel supongo que en el ejemplo donde hora:minuto es > 054, lo que representa es 0 horas y 54 minutos, si mi interpretación > es incorrecta la solución de Miguel es la correcta..Si alguien puede > contribuir con algo más genérico se agradecerá, pero para empezar esta > es mi contribución > > > x <- c(''20121007 1206'', ''20110622 1854'', > ''20110623 054'') > > tiempo <- function(x) { > xF <- as.POSIXlt( strptime(x, ''%Y%m%d %H%M'')) > xT <- as.POSIXlt( strptime( paste(substr(x, 1, max(gregexpr(" ", > x)[[1]])), 0, substr(x,max(gregexpr(" ", x)[[1]])+1,nchar( x)), > sep=""), ''%Y%m%d %H%M'')) > if((nchar(x)-max(gregexpr(" ", x)[[1]])) == 3) xT else xF > } > > lapply(x, tiempo) > > Daniel Merino > > > > El día 7 de marzo de 2013 09:04, JC A <j_arronte@hotmail.com> escribió: > > > > > > > > Hola a tod@s, > > > > Me han mandado una base de datos y al abrirla me he encontrado con la > fecha y la hora en el siguiente formato: > > > > > > > > FECHA HORA > > > > 20121007 1206 > > > > 20110622 1854 > > > > 20110623 054 > > > > > > He conseguido que la Fecha me quedara en el formato dd/mm/aaaa mediante > el script > > > > db[, "FECHA"] <- as.Date(as.character(db[, "FECHA"]),format = "%Y%m%d") > > Sin embargo, con la hora todavía no he dado con la forma. Se me está > pasando algo por alto y no doy con ello > > > > ¿Alguna idea? > > > > Un saludo y Gracias > > > > Juan Carlos > > > > > > *************************************** > > Si las cuerdas del trapecio las corté > > fue para subir y atarlas > > y ver a la luna otra vez. > > Y volverlas a cortar una y mil veces > > y boquear como los peces cuando les toca perder. > > > > > > [[alternative HTML version deleted]] > > > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es@r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > -- > Daniel > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Gracias, Carlos. Estaba a punto de mencionar esa funcion, pero no creo que realice lo que Daniel necesita. Por ejemplo la primera entrada de x es "20121007 1206" y con lubridate el resultado es 2020-12-10 07:12:06. Es claro que algo no esta bien. --JIV 2013/3/8 Carlos Ortega <cof@qualityexcellence.es>> Hola, > > Otra opción es con el paquete "lubridate". Con la función "ymd_hms()" que > prueba varias opciones hasta encontrar la recurrencia del formato. > > Con solo una función se resuelve: > > > library(lubridate) > > x <- c(''20121007 1206'', ''20110622 1854'', > + ''20110623 054'') > > > > ymd_hms(x) > 3 parsed with %y%m%d%H %M%S > [1] "2020-12-10 07:12:06 UTC" "2020-11-06 22:18:54 UTC" "2020-11-06 > 23:05:04 UTC" > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > > > > El 7 de marzo de 2013 13:48, daniel <daniel319@gmail.com> escribió: > > > Primero fijate si los datos respetan el ejemplo que enviastes (lugar > > de los años, meses, dias, horas y minutos, en especial la cantidad de > > dígitos para cada uno, para modificar la función si es necesario. A > > diferencia de Miguel supongo que en el ejemplo donde hora:minuto es > > 054, lo que representa es 0 horas y 54 minutos, si mi interpretación > > es incorrecta la solución de Miguel es la correcta..Si alguien puede > > contribuir con algo más genérico se agradecerá, pero para empezar esta > > es mi contribución > > > > > > x <- c(''20121007 1206'', ''20110622 1854'', > > ''20110623 054'') > > > > tiempo <- function(x) { > > xF <- as.POSIXlt( strptime(x, ''%Y%m%d %H%M'')) > > xT <- as.POSIXlt( strptime( paste(substr(x, 1, max(gregexpr(" ", > > x)[[1]])), 0, substr(x,max(gregexpr(" ", x)[[1]])+1,nchar( x)), > > sep=""), ''%Y%m%d %H%M'')) > > if((nchar(x)-max(gregexpr(" ", x)[[1]])) == 3) xT else xF > > } > > > > lapply(x, tiempo) > > > > Daniel Merino > > > > > > > > El día 7 de marzo de 2013 09:04, JC A <j_arronte@hotmail.com> escribió: > > > > > > > > > > > > Hola a tod@s, > > > > > > Me han mandado una base de datos y al abrirla me he encontrado con la > > fecha y la hora en el siguiente formato: > > > > > > > > > > > > FECHA HORA > > > > > > 20121007 1206 > > > > > > 20110622 1854 > > > > > > 20110623 054 > > > > > > > > > He conseguido que la Fecha me quedara en el formato dd/mm/aaaa mediante > > el script > > > > > > db[, "FECHA"] <- as.Date(as.character(db[, "FECHA"]),format = "%Y%m%d") > > > Sin embargo, con la hora todavía no he dado con la forma. Se me está > > pasando algo por alto y no doy con ello > > > > > > ¿Alguna idea? > > > > > > Un saludo y Gracias > > > > > > Juan Carlos > > > > > > > > > *************************************** > > > Si las cuerdas del trapecio las corté > > > fue para subir y atarlas > > > y ver a la luna otra vez. > > > Y volverlas a cortar una y mil veces > > > y boquear como los peces cuando les toca perder. > > > > > > > > > [[alternative HTML version deleted]] > > > > > > > > > _______________________________________________ > > > R-help-es mailing list > > > R-help-es@r-project.org > > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > > > > > > -- > > Daniel > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es@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@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
Juan Carlos, El which() en db[,-which(names(db) %in% c("HORA", "FECHA"))] no es necesario. Basta con escribir db[ , !names(db) %in% c("HORA", "FECHA") ] Un saludo, Jorge.- 2013/3/8 JC A <j_arronte@hotmail.com>> Buenas tardes, > > Creo que ya está conseguido y que ahora la columna Fecha y Hora de mi base > de datos ya está en el formato apropiado. > > db$FECHA2 <- db$FECHA > db$FECHA2 <- as.Date(as.character(db$FECHA), format("%Y%m%d")) > db$HORA2 <- db$HORA > db$HORA2 <- formatC(as.numeric(db$HORA2), width = 4, flag = "0") > db$HORA2 <-substr(strptime(db$HORA2,format="%H%M"),12,16) > db<-db[,-which(names(db) %in% c("HORA", "FECHA"))] > > He estado probando sólo con 1000 datos y me ha salido lo que buscaba. > Veremos si ahora con la base de datos completa (casi 2.500.000 filas x13 > columnas), no tengo problemas con el ordenador al ejecutarlos. > > Muchas gracias a todos por vuestras ideas. > > Un saludo > > Juan Carlos > >[[alternative HTML version deleted]]
Buenos días Jorge, Siempre se aprenden cosas nuevas y más en R. Un saludo y gracias JC *************************************** Si las cuerdas del trapecio las corté fue para subir y atarlas y ver a la luna otra vez. Y volverlas a cortar una y mil veces y boquear como los peces cuando les toca perder. From: jorgeivanvelez@gmail.com Date: Fri, 8 Mar 2013 09:53:35 +1100 Subject: Re: [R-es] Convertir eh hora To: j_arronte@hotmail.com CC: r-help-es@r-project.org Juan Carlos, El which() en db[,-which(names(db) %in% c("HORA", "FECHA"))] no es necesario. Basta con escribir db[ , !names(db) %in% c("HORA", "FECHA") ] Un saludo, Jorge.- 2013/3/8 JC A <j_arronte@hotmail.com> Buenas tardes, Creo que ya está conseguido y que ahora la columna Fecha y Hora de mi base de datos ya está en el formato apropiado. db$FECHA2 <- db$FECHA db$FECHA2 <- as.Date(as.character(db$FECHA), format("%Y%m%d")) db$HORA2 <- db$HORA db$HORA2 <- formatC(as.numeric(db$HORA2), width = 4, flag = "0") db$HORA2 <-substr(strptime(db$HORA2,format="%H%M"),12,16) db<-db[,-which(names(db) %in% c("HORA", "FECHA"))] He estado probando sólo con 1000 datos y me ha salido lo que buscaba. Veremos si ahora con la base de datos completa (casi 2.500.000 filas x13 columnas), no tengo problemas con el ordenador al ejecutarlos. Muchas gracias a todos por vuestras ideas. Un saludo Juan Carlos [[alternative HTML version deleted]]