Convertire personaggio fino ad oggi in R
Domanda
Sono relativamente nuovo a R, ma questa è la prima volta che ho avuto a che fare con le conversioni di data. Ho letto nei miei dati da un file CSV (utilizzando read.table ()), ma ho cortocircuitato i dati per evidenziare il mio problema. Quando viene letto in R, il campo Data è il carattere.
Semplicemente, la maggior parte dei miei date ottenere costretto correttamente, ad eccezione di pochi casi. L'esempio che segue, si spera, mostrerà ciò che sta accadendo.
# my attempt to coerce the date -- uses the stringr package
prods.all$Date2 <- as.Date(str_sub(prods.all$Date, 1,
str_locate(prods.all$Date, " ")[1]-1),
"%m/%d/%Y")
# grab two rows to highlight my issue
temp <- prods.all[c(1925:1926), c(1,8)]
> temp
Date Date2
1925 10/9/2009 0:00:00 2009-10-09
1926 10/15/2009 0:00:00 0200-10-15
Come si può vedere, l'anno di alcune delle date è imprecisa. Il modello sembra verificarsi quando la giornata è a due cifre.
Ho osservato con un paio di libri e ha cercato di Google un modo migliore, ma tutto sembra suggerire che i miei dati non sono formattati in modo corretto su input.
Dato come potente R è, immagino che c'è un modo molto semplice per costringere mia colonna di essere date valide e che io sto sottovalutando una soluzione molto evidente.
Qualsiasi aiuto che potete fornire sarà molto apprezzato.
Soluzione
Si può essere overcomplicating cose, c'è qualche ragione è necessario il pacchetto stringr?
df <- data.frame(Date = c("10/9/2009 0:00:00", "10/15/2009 0:00:00"))
as.Date(df$Date, "%m/%d/%Y %H:%M:%S")
[1] "2009-10-09" "2009-10-15"
Più in generale, e se è necessario il componente di tempo pure, l'uso strptime:
strptime(df$Date, "%m/%d/%Y %H:%M:%S")
Sto cercando di indovinare che cosa i vostri dati effettivi potrebbero osservare dai risultati parziali che si danno.
Altri suggerimenti
Il modo più semplice è quello di utilizzare lubridate:
library(lubridate)
prods.all$Date2 <- mdy(prods.all$Date2)
Questa funzione restituisce automaticamente oggetti della classe POSIXct
e lavorerà sia con fattori o caratteri.
library(lubridate)
se il formato della data è come questo '04 / 24/2017 05: 35: cambiamento 00'then è come qui di seguito
prods.all$Date2<-gsub("/","-",prods.all$Date2)
quindi modificare il formato della data
parse_date_time(prods.all$Date2, orders="mdy hms")