2012-03-25 27 views
7

Tengo datos meteorológicos por hora. He visto los ejemplos de la función de aquí: http://casoilresource.lawr.ucdavis.edu/drupal/node/991Convertir 12 horas a 24 horas

Estoy alterando el código para dar cuenta de los datos del aeropuerto, que tiene un tipo de URL diferente. Otro problema con los datos meteorológicos del aeropuerto es que los datos de tiempo se guardan en formato de 12 horas. Este es un ejemplo de los datos:

14 10:43 AM 
15 10:54 AM 
16 11:54 AM 
17 12:07 PM 
18 12:15 PM 
19 12:54 PM 
20 1:54 PM 
21 2:54 PM 

Esto es lo que he intentado: (veo que el uso de sólo 'PM' no es lo suficientemente cuidadoso porque cualquier momento entre los 12 y la 1 pm estarán apagados si se van a través de este alg)

date<-Sys.Date() 


data$TimeEST<-strsplit(data$TimeEST, ' ') 
for (x in 1:35){ 
    if('AM' %in% data$TimeEST[[x]]){ 
     gsub('AM','',data$TimeEST[[x]]) 
     data$TimeEST[[x]]<-str_trim(data$TimeEST[[x]]) 
     data$TimeEST[[x]]<-str_c(date,' ',data$TimeEST[x],':',data$TimeEST[2]) 
    } 
    else if('PM' %in% data$TimeEST[[x]]){ 
     data$TimeEST[[x]]<-gsub('PM', '',data$TimeEST[[x]]) 
     data$TimeEST[[x]]<-strsplit(data$TimeEST[[x]], ':') 
     data$TimeEST[[x]][[1]][1]<-as.integer(data$TimeEST[[x]][[1]][1])+12 
     data$TimeEST[[x]]<-str_trim(data$TimeEST[[x]][[1]]) 
     data$TimeEST[[x]]<-str_c(date, " ", data$TimeEST[[x]][1],':',data$TimeEST[[x]][2]) 

    } 
} 

¿Algún ayuda?

Respuesta

15

¿Funcionaría strptime?

df2= structure(c("10:43 AM", "10:54 AM", "11:54 AM", "12:07 PM", "12:15 PM", 
      "12:54 PM", "1:54 PM", "2:54 PM"), .Dim = c(8L, 1L)) 



strptime(df2, "%I:%M %p") 

O en caso de que no desea que la fecha, algo así como: aunque depende de qué tipo de clase le gustaría para el objeto.

substr(strptime(df2, "%I:%M %p"),11,19) 
+0

la fecha es bastante grande. Me gustaría que la información de fecha/hora sea un objeto que pueda colocarse en un objeto de zoológico, pero más grande que eso, el objetivo principal de la función es devolver datos para un día específico. Si pierdo esa información de fecha, lo cual no está en la columna para empezar, causaré dolores de cabeza en el futuro. La información de fecha es provista por el usuario cuando ingresa un rango de fechas en la función inicial. Para cada día en ese rango, se lee un sitio web y luego se limpian los datos. Parte de la limpieza es la conversión de 12 a 24 horas. Gracias de nuevo –

+0

'# convertir Columna de tiempo en fecha de tiempo codificada correctamente ' data $ TimeEST <- strptime (data $ TimeEST, format = '% I:% M% p') '
' data $ TimeEST <- substr (data $ TimeEST, 11, 19) ' ' data $ TimeEST <- str_c (date, data $ TimeEST) ' ' data $ TimeEST <- as.POSIXlt (data $ TimeEST, format = '% Y-% m- % d% H:% M:% S ') '@AndresT Gracias por las sugerencias, esto es lo que usé para obtener el tipo de objeto deseado. –

+0

O 'formato (strptime (df2,"% I:% M% p "),"% T ")' –

3

eche un vistazo a ?strptime.

as.POSIXct(data$TimeEST, format='%I:%M %p') 
Cuestiones relacionadas