2012-05-21 12 views
8

Tengo un vector DateTime dentro de un data.frame donde el marco de datos se compone de 8760 observaciones que representan intervalos por hora a lo largo del año, p.obtener hora del vector DateTime

2010-01-01 00:00 
2010-01-01 01:00 
2010-01-01 02:00 
2010-01-01 03:00 

y así sucesivamente.

Me gustaría crear un data.frame que tenga el vector DateTime original como la primera columna y luego los valores por hora en la segunda columna, p.

2010-01-01 00:00   00:00 
2010-01-01 01:00   01:00 

¿Cómo se puede lograr esto?

Respuesta

11

Use format o strptime para extraer la información de tiempo.

Crear un vector POSIXct:

x <- seq(as.POSIXct("2012-05-21"), by=("+1 hour"), length.out=5) 

Extracto de la época:

data.frame(
    date=x, 
    time=format(x, "%H:%M") 
) 

       date time 
1 2012-05-21 00:00:00 00:00 
2 2012-05-21 01:00:00 01:00 
3 2012-05-21 02:00:00 02:00 
4 2012-05-21 03:00:00 03:00 
5 2012-05-21 04:00:00 04:00 

Si el vector de entrada es un vector de caracteres, entonces usted tiene que convertir a POSIXct primera:

Crear algunos datos

dat <- data.frame(
    DateTime=format(seq(as.POSIXct("2012-05-21"), by=("+1 hour"), length.out=5), format="%Y-%m-%d %H:%M") 
) 
dat 
      DateTime 
1 2012-05-21 00:00 
2 2012-05-21 01:00 
3 2012-05-21 02:00 
4 2012-05-21 03:00 
5 2012-05-21 04:00 

de tiempo intermedio a cabo:

data.frame(
    DateTime=dat$DateTime, 
    time=format(as.POSIXct(dat$DateTime, format="%Y-%m-%d %H:%M"), format="%H:%M") 
) 

      DateTime time 
1 2012-05-21 00:00 00:00 
2 2012-05-21 01:00 01:00 
3 2012-05-21 02:00 02:00 
4 2012-05-21 03:00 03:00 
5 2012-05-21 04:00 04:00 
+0

El vector de fecha y hora se importa en r desde un archivo de texto, por lo tanto, no tengo simplemente el vector en formato AAAA-dd-mm pero como AAAA-dd-mm HH: MM, por lo tanto, al reemplazar el tiempo anterior con mi vector, no funcionará. ¿Cómo convertiría el vector que tengo, es decir, en el formato YYYY-mm-dd HH: MM en un vector POSIXct? – user1407388

+0

use el as.POSIXct y estipule el formato como argumento. ver? as.POSIXct – JackeJR

+0

He intentado x <- as.POSIXct (DateTime, format = "% Y-% m-% d% H:% M") pero devuelve un error: Error en as.POSIXct.default (DateTime, format = "% Y-% m-% d% H:% M"): no sé cómo convertir 'DateTime' a la clase "POSIXct" – user1407388

2

o genéricamente, no tratarlos como fechas, puede utilizar los siguientes proporcionaron que el tiempo y las fechas se rellenan correctamente.

library(stringr) 
df <- data.frame(DateTime = c("2010-01-01 00:00", "2010-01-01 01:00", "2010-01-01 02:00", "2010-01-01 03:00")) 
df <- data.frame(df, Time = str_sub(df$DateTime, -5, -1)) 

que depende de sus necesidades realmente.

2

Usando lubridate

library(stringr) 
library(lubridate) 
library(plyr) 

df <- data.frame(DateTime = c("2010-01-01 00:00", "2010-01-01 01:00", "2010-01-01 02:00", "2010-01-01 03:00")) 

df <- mutate(df, DateTime = ymd_hm(DateTime), 
       time = str_c(hour(DateTime), str_pad(minute(DateTime), 2, side = 'right', pad = '0'), sep = ':')) 
Cuestiones relacionadas