2014-09-26 5 views
8

Mam problem ze zrozumieniem, jak korzystać z funkcji guess_formats w lubridate. Mam wektor dat w nieznanym zestawie/kolejności formatów. Chciałbym przekonwertować je na obiekt Date (lub przynajmniej przekonwertować jak najwięcej). Poniższy kod jest tym, co próbowałem:guess_formats + R + lubridate

library(lubridate) 
sampleDates <- c("4/6/2004","4/6/2004","4/6/2004","4/7/2004", 
     "4/6/2004","4/7/2004","2014-06-28","2014-06-30","2014-07-12", 
     "2014-07-29","2014-07-29","2014-08-12") 
formats <- guess_formats(sampleDates, c("Ymd", "mdY")) 
dates <- as.Date(sampleDates, format=formats) 

Daje to wszystkie NA.

Jest to oczywiście tylko krótki przykład. W prawdziwym przypadku nie wiedziałbym, gdzie rozproszone są różne formaty, i nie byłbym w 100% pewien, czy są to tylko% m /% d /% Y i% Y-% m-% d. Czy ktoś mógłby mi powiedzieć albo A. jak w tym przykładzie można użyć guess_formats, albo B. czy jest coś bardziej odpowiedniego do użycia w lubridate/base R, mam nadzieję, że bez dużej ilości regex'owania. Dzięki!

Edytuj: Próbowałem również parse_date_time. Co nie rozumiem jest następujące prace na ten przykład:

parse_date_time(sampleDates, 
      orders = c("Ymd", "mdY"), 
      locale = "eng") 

Ale tego nie robi:

parse_date_time(sampleDates, 
      orders = c("mdY", "Ydm"), 
      locale = "eng") 

W moim rzeczywistego zestawu danych, nie będą wiedzieć, kolejność formatowania co wydaje się ważne dla tej funkcji.

Podwójna edycja: Dur, OK, widzę, że miałem Ymd w pierwszym przykładzie parse_date_time, a Ydm w drugim ... kontynuuj.

Odpowiedz

10

Nie trzeba zadzwonić wystarczy użyć parse_date_time:

parse_date_time(sampleDates, c("Ymd", "mdY")) 

[1] "2004-04-06 UTC" "2004-04-06 UTC" "2004-04-06 UTC" "2004-04-07 UTC" "2004-04-06 UTC" 
[6] "2004-04-07 UTC" "2014-06-28 UTC" "2014-06-30 UTC" "2014-07-12 UTC" "2014-07-29 UTC" 
[11] "2014-07-29 UTC" "2014-08-12 UTC" 

Wewnętrznie to nazwać .

Powiązane problemy