2012-09-29 16 views
18

Tengo un dato con más de 3 millones de registros que tienen start.time y end.time como dos de las variables. Los primeros 10 obs son los siguientes:calculando la diferencia de tiempo en R

start.date start.time end.date end.time 
1 2012-07-13 15:01:32 2012-07-13 15:02:42 
2 2012-07-05 18:26:31 2012-07-05 18:27:19 
3 2012-07-14 20:23:21 2012-07-14 20:24:11 
4 2012-07-29 16:09:54 2012-07-29 16:10:48 
5 2012-07-21 14:58:32 2012-07-21 15:00:17 
6 2012-07-04 15:36:31 2012-07-04 15:37:11 
7 2012-07-22 18:28:31 2012-07-22 18:28:50 
8 2012-07-09 21:08:42 2012-07-09 21:09:02 
9 2012-07-05 09:44:52 2012-07-05 09:45:05 
10 2012-07-02 18:50:47 2012-07-02 18:51:38 

Necesito calcular la diferencia entre start.time y end.time.

He utilizado el siguiente código:

mbehave11$diff.time <- difftime(mbehave11$end.time, mbehave11$start.time, units="secs") 

Pero estoy recibiendo este error:

Error in as.POSIXlt.character(x, tz, ...) : 
    character string is not in a standard unambiguous format 
In addition: Warning messages: 
1: In is.na.POSIXlt(strptime(xx, f <- "%Y-%m-%d %H:%M:%OS", tz = tz)) : 
    Reached total allocation of 1535Mb: see help(memory.size) 
+0

¿Puede proporcionar un ejemplo reproducible? Puede leer esto para obtener más información al respecto: http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Dason

Respuesta

32

Usted debe convertir sus cadenas en los objetos de fecha antes de que pueda hacer de fecha/aritmética tiempo. Prueba esto:

a) La lectura de los datos:

R> dat <- read.table(textConnection("start.date start.time end.date end.time 
2012-07-13 15:01:32 2012-07-13 15:02:42 
2012-07-05 18:26:31 2012-07-05 18:27:19 
2012-07-14 20:23:21 2012-07-14 20:24:11"), header=TRUE) 

b) Trabajar en una observación:

R> strptime(paste(dat[,1], dat[,2]), "%Y-%m-%d %H:%M:%S") 
[1] "2012-07-13 15:01:32" "2012-07-05 18:26:31" "2012-07-14 20:23:21" 

c) Trabajar en el set, convirtiendo a numérico:

R> as.numeric(difftime(strptime(paste(dat[,1],dat[,2]),"%Y-%m-%d %H:%M:%S"), 
         strptime(paste(dat[,3],dat[,4]),"%Y-%m-%d %H:%M:%S"))) 
[1] -70 -48 -50 
R> 
+0

, pero ¿qué significaría el resultado? Me refiero al resultado -70 -48 -50. ¿Cómo puedo interpretarlos como la diferencia en minutos? – user1702490

+6

Ver 'help (difftime)' - hay un argumento de unidades que por defecto está en segundo y que puede anular. Pero solo para verificar, mire -70 en la primera línea y piense cuál es la diferencia de tiempo en la primera fila del conjunto: setenta segundos. Si desea minuts, use 'units =" min "'). Es fácil. –

Cuestiones relacionadas