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.

È stato utile?

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")

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