2014-04-28 20 views
10

Queste sono le informazioni contenute all'interno del mio dataframe:Factor Converti in data/ora in R

## minuteofday: factor w/ 89501 levels "2013-06-01 08:07:00",... 
## dDdt: num 7.8564 2.318 ... 
## minutes: POSIXlt, format: NA NA NA 

Ho bisogno di convertire minuto di colonna di giornata per un formato di data/ora:

minuteave$minutes <- as.POSIXlt(as.character(minuteave$minuteofday), format="%m/%d/%Y %H:%M:%S") 

Ho provato as.POSIXlt, as.POSIXct e as.Date. Nessuno dei quali ha funzionato. Qualcuno ha QUALSIASI pensiero.

L'obiettivo è quello di tracciare minuti contro dDdt, ma non mi permette di tracciare nel periodo di tempo specificato che voglio come fattore. Non ho idea di cosa provare dopo ...

+0

È necessario selezionare una risposta in modo da rispondere a questa domanda. –

risposta

14

È necessario inserire uno as.character() prima di eseguire l'analisi come data/ora.

Un fattore tornerà sempre prima come numero corrispondente al suo livello.

È possibile salvare la conversione da fattore a carattere dicendo a read.csv() ecc nessun deposito come fattore: stringsAsFactors=FALSE. Puoi anche impostarlo come opzione globale.

Una volta che avete come carattere, assicurarsi che si abbinare la stringa di formato per i dati:

R> as.POSIXct("2013-06-01 08:07:00", format="%Y-%m-%d %H:%M:%S") 
[1] "2013-06-01 08:07:00 CDT" 
R> 

Annotare il %Y-%m-%d ho usato, in contrapposizione al vostro %m/%d/%y.

Modifica il 3 gen 2016: Questo è ora molto più facile grazie al pacchetto anytime che converte automagicamente da molti tipi, tra cui factor, e lo fa senza la necessità di una stringa di formato.

R> as.factor("2013-06-01 08:07:00") 
[1] 2013-06-01 08:07:00 
Levels: 2013-06-01 08:07:00 
R> 
R> library(anytime) 
R> anytime(as.factor("2013-06-01 08:07:00")) 
[1] "2013-06-01 08:07:00 CDT" 
R> 
R> class(anytime(as.factor("2013-06-01 08:07:00"))) 
[1] "POSIXct" "POSIXt" 
R> 

Come si può vedere che abbiamo appena alimentiamo la variabile fattore in anytime() e viene fuori il tipo POSIXct desiderato.

+0

Penso che abbia già inserito 'as.character' il problema è che ha un errore nel formato imo –

+0

Grazie, ho notato anche questo in seconda lettura e ha ampliato la mia risposta. Il problema rimanente (che la tua risposta ripete) è la conversione 'as.POSIXlt' (senza estrarre minuti). –

7

Prova questa

library(lubridate) minuteave$minutes <- ymd_hms(minuteave$minutes)

questo tornerà minuteave $ minuti come un oggetto POSIXct.

Spero che questo ti aiuti.