2015-12-07 7 views
6

Sono date di sottrazione. Nell'esempio seguenteCome modificare le unità di difftime dopo aver calcolato i valori, e non usando unità = "xxx" quando si eseguono i calcoli

bb 

FECHA_EFECTO_ESTADO FECHA_ANIVERSARIO_POLIZA 
9 2015-11-05 09:49:00    2015-11-05 
10 2015-11-05 09:51:00    2015-11-04 

le colonne sono valori di data posixct. Per creare una nuova variabile che è la differenza delle altre variabili potrei usare:

library (dplyr) 
bb<-aa<-mutate(bb, day1=abs(FECHA_EFECTO_ESTADO-FECHA_ANIVERSARIO_POLIZA)) 
bb 
    FECHA_EFECTO_ESTADO FECHA_ANIVERSARIO_POLIZA   day1 
1 2015-11-05 09:49:00    2015-11-05 9.816667 hours 
2 2015-11-05 09:51:00    2015-11-04 33.850000 hours 

Per impostazione predefinita, le unità (giorni, ore, secondi) se la variabile day1 dipende dalla quantità della differenza. Se voglio avere la differenza di giorni, ho potuto fare:

bb<-mutate(bb, day2=abs (difftime(FECHA_EFECTO_ESTADO, FECHA_ANIVERSARIO_POLIZA, units="days"))) 
bb 
    FECHA_EFECTO_ESTADO FECHA_ANIVERSARIO_POLIZA   day1   day2 
1 2015-11-05 09:49:00    2015-11-05 9.816667 hours 0.4090278 days 
2 2015-11-05 09:51:00    2015-11-04 33.850000 hours 1.4104167 days 

c'è un modo per specificare le unità (giorni in questo caso) dopo fare i calcoli? Potrei trovare più in basso l'analisi che preferirei avere la differenza in ore, ad esempio, così:
Come posso modificare le unità delle colonne day1 o day2 a posteriori?
Grazie

risposta

6

Ciò che è restituito da difftime è un oggetto della classe "difftime".

Altre funzioni hanno metodi per difftime. Ad esempio, per convertire il numero di ore, come numerico:

as.numeric(difftime("2015-12-07", "2015-12-05"), units="hours") 

[1] 48

Oppure, per ottenere settimane:

as.numeric(difftime("2015-12-07", "2015-12-05"), units="weeks") 

[1] 0.2857143

Inoltre, potrebbe essere utile ricordare che gli oggetti POSIXct sono in realtà numeri! Rappresentano il numero di secondi trascorsi dal ‘1970-01-01 00:00.00 UTC’, (presuppone il calendario gregoriano).

Di conseguenza, può spesso essere conveniente pensare a un'unità di tempo di durata fissa (cioè, non qualcosa come "mese", che non è costante) ed eseguire calcoli che lo utilizzano. Ad esempio, una volta che la differenza di tempo è in secondi, è necessario convertirla in un'altra costante (tecnicamente c'è una variazione di scala molto fine in alcune di queste, ma la maggior parte delle applicazioni non richiede attenzione a questi dettagli) unità di tempo come minuti, ore, giorni o settimane.

+1

grazie @rbatt. Stavo cercando un modo per cambiare l'intera colonna 'day2' in ore per esempio; o colonna 'giorno1' a giorni. Prendendo dalla tua risposta posso vedere ora che se faccio 'bb $ day1 <- as.numeric (bb $ day1, units =" days ")' Posso cambiare le unità della variabile day1 da ore a giorni !! –

+0

@MiguelRayonGonzalez Se hai trovato utile questa risposta, dovresti prendere in considerazione l'upvoting. Se ha risposto alla tua domanda, dovresti prendere in considerazione l'accettazione. – rbatt

2

Ora, grazie a @rbatt mi sono reso conto che, nel mio esempio, per cambiare le unità di day1 variabile, posso fare bb$day1<- as.numeric(bb$day1, units="days")

E questo cambierà le unità di giorni:

FECHA_EFECTO_ESTADO FECHA_ANIVERSARIO_POLIZA   day1   day2 
9 2015-11-05 09:49:00    2015-11-05 9.816667 hours 0.4090278 days 
10 2015-11-05 09:51:00    2015-11-04 33.850000 hours 1.4104167 days 

bb$day1<- as.numeric(bb$day1, units="days") 

bb 

    FECHA_EFECTO_ESTADO FECHA_ANIVERSARIO_POLIZA  day1   day2 
9 2015-11-05 09:49:00    2015-11-05 0.4090278 0.4090278 days 
10 2015-11-05 09:51:00    2015-11-04 1.4104167 1.4104167 days