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

enter image description here

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top