Domanda

Dopo aver convertito i fattori nel formato POSIXCT e quindi applicando il formato DateTime, voglio prendere la differenza di DateTime tra 2 POS1 e POS2.

Tuttavia, quando lo faccio per un elemento specifico ottengo la risposta giusta nella console, ma quando faccio l'operazione sull'intero set, la console emette solo il numero e anche la dataframe riflette tali numeri come puoi vedere.

.

Come posso ottenere le ore nel dataframe quando sto cercando di fare la differenza? Sto usando il pacchetto Lubridate, c'è qualche funzione da fare?

Ecco alcuni ESEMPRE CODICE / Immagine dei dati in Rstudio che lo descrive

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
.

Inserire l'immagine Descrizione qui

È stato utile?

Soluzione

Prima cosa, questo non ha nulla a che fare con lubridato.

In secondo luogo, Rstudio ti ha deluso avvitando la stampa della variabile nella finestra del display.Se si inserisce CR_Date$hours nella finestra della riga di comando vedrai stampe

#Time differences in secs
#[1]     0 36900
.

e head(CR_Date) dà:

#        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
.

uno dei quali ti avrebbe tirato fuori su cosa sta visualizzando.

Come suggerisce @Victorp, difftime è il modo per risolvere questo:

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
.

Altri suggerimenti

È inoltre possibile utilizzare il "metodo as.double" e il suo argomento units (vedere ?diffime):

.

Metodo as.double [as.double(x, units = "auto", ...)] Restituisce il valore numerico espresso nelle unità specificate

... dove x è

.

Un oggetto che eredita da classe "difftime"

Applicato al tuo esempio, dove pos2 - pos1 comporterà un oggetto difftime:

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 altro 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
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top