2015-04-28 15 views
6

Ho un frame di dati con 10 date che ho letto in R come numeri interi. Ecco il quadro dati:frame dati interi aggiornati in R

19820509 
19550503 
20080505 
19590505 
19940517 
19690504 
20050420 
20060503 
19840427 
19550513 

Lo chiameremo df.

ho tentato un paio di diverse linee di codice qui per cambiare semplicemente ogni valore per il formato della data in R come questo: "1982-05-09"

df <- as.Date(df, "%Y%m%d") 

non funziona e nemmeno

df <- as.POSIXlt(df, format = "%Y/%m/%d") 

o

df <- as.POSIXct(df), format = "%Y/%m/%d", origin = "19820509") 

Continuo a ricevere un errore che dice "non so come convertire" d f 'to class "date" o uno dei formati POSIX.

Ho pensato che sarebbe stato più semplice. Qualche idea?

Grazie.

+6

È necessario utilizzarlo sulla colonna del frame di dati, non sul frame dati stesso. –

+0

Ecco una soluzione POSIX in cui df è il tuo data.frame: 'as.POSIXct (as.character (df [, 1]), format ="% Y% m% d ")' –

risposta

7

È necessario fare riferimento a colonne specifiche anziché fare semplicemente riferimento al frame di dati. Se la variabile che contiene le date intero è in una cornice di dati df e si chiama x, si può fare questo:

df <- transform(df, x = as.Date(as.character(x), "%Y%m%d")) 

#    x 
# 1 1982-05-09 
# 2 1955-05-03 
# 3 2008-05-05 
# 4 1959-05-05 
# 5 1994-05-17 
# 6 1969-05-04 
# 7 2005-04-20 
# 8 2006-05-03 
# 9 1984-04-27 
# 10 1955-05-13 

Questo converte gli interi a stringhe di caratteri, quindi interpreta le stringhe come date.

Se voi più colonne contenenti date in questo formato, è possibile convertirli in un sol colpo, ma devi fare in modo leggermente diverso:

df <- data.frame(lapply(df, function(x) as.Date(as.character(x), "%Y%m%d"))) 

O, meglio ancora, come docendo discimus menzionato in un commento:

df[] <- lapply(df, function(x) as.Date(as.character(x), "%Y%m%d")) 
+0

Funziona!L'ho provato inizialmente, ma era ancora pignolo. La conversione dei caratteri funziona. Grazie. – user3720887

+0

@ user3720887: Sono contento che funzioni per voi. –

+1

Per il codice lapply, è possibile modificarlo leggermente in: 'df [] <- lapply (df, function (x) as.Date (as.character (x),"% Y% m% d "))' così non hai bisogno della chiamata data.frame –

4

Ecco la mia soluzione, richiede il pacchetto lubridate. È possibile utilizzare la funzione ymd del pacchetto lubridate come "funzione di sostituzione". Basta scegliere la colonna che si desidera convertire e sostituirla con la versione ymd di esso.

library(lubridate) 
data[ , 1 ] <- ymd(data[, 1]) 

Questo pacchetto offre più funzioni per analizzare i dati o stringhe di date, ymd (y = anno, m = mese, D = giorno), tutte con questo semplice schema.

+0

Grazie! Sì, ho esaminato il pacchetto di più per occuparmi di diverse attività correlate alla data in R. – user3720887

0

v = c (dati $ DATA)

data < - as.Date (pasta (v), il formato ("% Y% m% d"))

dati aggiornati

$ DATE è la data di consegna della colonna in formato intero come 20000131, 20000201

Problemi correlati