El cálculo de la Diferencia de Tiempo entre dos columnas
Pregunta
Después de la conversión de los factores en POSIXCT formato y, a continuación, aplicar formato datetime, quiero aprovechar la diferencia de datetime entre 2 pos1 y pos2.
Sin embargo, cuando hago eso para un elemento específico de yo llegar a la respuesta correcta en la consola, pero cuando hago la operación en el conjunto de la consola de salidas sólo número y también el dateframe refleja los número como se puede ver.
¿Cómo puedo obtener el horario en el dataframe cuando estoy tratando de tomar la diferencia?Estoy usando lubridate paquete, ¿hay alguna función para hacerlo?
Aquí está el código de ejemplo/imagen de los datos en RStudio describirlo
CR_Date <- data.frame(
pos1="2014-07-01 00:00:00",
pos2=c("2014-07-01 00:00:00","2014-07-01 10:15:00")
)
CR_Date[] <- lapply(CR_Date,as.POSIXct)
CR_Date
# pos1 pos2
#1 2014-07-01 2014-07-01 00:00:00
#2 2014-07-01 2014-07-01 10:15:00
CR_Date$pos2[2] - CR_Date$pos1[2]
#Time difference of 10.25 hours
CR_Date$hours <- CR_Date$pos2 - CR_Date$pos1
Solución
En primer lugar, esto no tiene nada que ver con LUBRIDATE.
En segundo lugar, RSTUDIO le ha decepcionado al atornillar con la impresión de la variable en la ventana de visualización.Si ingresa CR_Date$hours
en la ventana de la línea de comandos, lo verá imprime
#Time differences in secs
#[1] 0 36900
y head(CR_Date)
da:
# pos1 pos2 hours
#1 2014-07-01 2014-07-01 00:00:00 0 secs
#2 2014-07-01 2014-07-01 10:15:00 36900 secs
cualquiera de los cuales le habría inclinado en cuanto a lo que está mostrando.
Como sugiere @victorp, difftime
es la forma de resolver esto:
CR_Date$hours <- with(CR_Date, difftime(pos2,pos1,units="hours") )
CR_Date
# pos1 pos2 hours
#1 2014-07-01 2014-07-01 00:00:00 0.00 hours
#2 2014-07-01 2014-07-01 10:15:00 10.25 hours
Otros consejos
Usted también puede usar el "as.double
método" y su units
argumento (ver ?diffime
):
as.double
método [as.double(x, units = "auto", ...)
] devuelve el valor numérico expresado en las unidades específicas
...donde x
es
un objeto que hereda de la clase
"difftime"
Aplicado a su ejemplo, donde pos2 - pos1
el resultado será un difftime
objeto:
CR_Date$hours <- as.double(CR_Date$pos2 - CR_Date$pos1, units = "hours")
CR_Date
# pos1 pos2 hours
#1 2014-07-01 2014-07-01 00:00:00 0.00
#2 2014-07-01 2014-07-01 10:15:00 10.25
O otros units
:
as.double(CR_Date$pos2 - CR_Date$pos1, units = "mins")
#[1] 0 615
as.double(CR_Date$pos2 - CR_Date$pos1, units = "days")
#[1] 0.0000000 0.4270833