2017-08-29 57 views
1

我在我的數據中有幾列使用parse_date_time,這些列有多種日期格式。例如,一列可能有日期格式"%d-%b-%y""%m/%d/%Y"parse_date_time混合日期和月份

因此,"06/11/2017""%m/%d/%Y")和"11-Jun-17""%d-%b-%y")對應於同一日期「2017年6月11日」("%Y-%m-%d"

我使用lubridate::parse_date_time解析的日期,其中不同的日期格式可以是在orders參數指定:

x <- c("06-11-2017", "11-Jun-17") 
parse_date_time(x, orders = c("%d-%b-%y", "%m/%d/%Y"), locale = "eng") 
# [1] "2017-11-06 UTC" "2017-06-11 UTC" 

雖然這應該吐出兩個日期爲"2017-06-11",它不解析月份和日期正確的"%m/%d/%Y"日期,通過改變檢查月:

x <- c("05-11-2017", "11-Jun-17") 
parse_date_time(x, orders = c("%d-%b-%y", "%m/%d/%Y"), locale = "eng") 
# [1] "2017-11-05 UTC" "2017-06-11 UTC" 

05應該被解析爲%m,但事實並非如此。

我對parse_date_time的調查顯示有錯誤,我認爲這是錯誤。但是,我想知道我能做些什麼來獲得我需要的結果?

更新:這裏是我正在使用的數據的一個例子。通過添加「精確=真」它修復了我的問題。

測試$ Transmission.date [1] 「22-FEB-16」, 「10-MAR-16」, 「10-MAR-16」, 「10-MAR-16」, 「15-JAN-16」 「15-Jan-16」「15-Jan-16」「15-Jan-16」「15-Jan-16」「15-Jan-16」「4/6/2016」 [12]「4/6 「2016/04/26」「2016/04/26」「2016/04/14」「2016/12/14」「2016/12/30」「2016/12/30」「2016/04/14」「4/12/2016/04/12「」2016/04/12「」2016/12/14「 [23]」2016/12/14「」2016/04/24「」2016/04/24「」4 「2016/04/24」「2016/04/14」「2016/04/24」「2016/04/24」「2016/04/24」「2016/04/24」「2016/04/24」「4/2016年4月「 」[4]「2016年4月4日」「2016年4月4日」 test $ Buyer.RFQ.Close.Date [1]「25-Feb-16」「10-三月-16」 「10-Mar-16」「10-Mar-16」「27-Jan-16」「27-Jan-16」「27-Jan-16」「27-Jan-16」「27-Jan-16」「 27-Jan-16「」5/4/2016「 [12]「2016/05/24」「2016/05/25」「2016/05/25」「2016/10/25」「2016/10/10」「2016/10/10」「5/10/2016」「5/10 「2016/10/20」「2016/10/10」「2016/10/10」「2016/10/10」「2016/10/10」 [23]「2016/10/10」「2016/04/28」「 2016/05/25「」2016/05/25「」2016/05/25「」2016/05/25「」2016/05/25「」2016/5/2「」2016/5/2「」4/28/2016「」5/2/2016「 [34]」2016/4/28「」2016/5/2「 test $ RFQ.close.date [1]」25-Feb-16「」 10-Mar-16「」10-Mar-16「」10-Mar-16「」27-Jan-16「」27-Jan-16「」27-Jan-16「」27-Jan-16「」27 -Jan-16「」2016-1-1「2016-4-22」 [12]「2016/4/22」「2016/04/22」「2016/4/22」「2016/5/3」 「」2016/05/23「」2016/05/23「」2016/05/23「」2016/05/23「 [5] 2016/4/28「」「」「2016/04/28」「」「2016/04/28」「2016/04/28」「2016/04/28」 「2016/4/28」「」「2016/4/28」 [34]「」「2016/4/28」

+1

@ alexb523似乎是一個錯誤。我無法解析它(它是或者)。我甚至嘗試過''parse_date_time(x,c(「%m /%d /%Y」,「%d-%m-%Y」),exact = TRUE)你可以看看'select_formats',但我從來沒有用過它 – CPak

+1

你應該添加'library(wherever_that_function_comes_from)'。 – Frank

+1

我認爲這是一個類似於我幾年前報告的錯誤:[使用parse_date_time解析日期格式爲dmy和dmY](https://stackoverflow.com/questions/19127095/parse-dates-in-format- dmy-together-with-dmy-using-parse-date-time-in-package-lub),其中'orders'的某些組合運行不好。無效:'parse_date_time(「06-11-2017」,orders = c(「dby」,「mdY」),locale =「eng」)''。 Works:'parse_date_time(「06-11-2017」,orders =「mdY」,locale =「eng」)'; 'parse_date_time(c(「06-11-2017」,「07-06-11」),orders = c(「mdY」,「ymd」),locale =「eng」)' – Henrik

回答

2

如果只有兩種不同的格式,則可以在基本R中相對容易地完成。如果可以有更多的格式,其他方法將是必要的

x = c("06/11/2017", "11-Jun-17") 
as.Date(x, format = c("%m/%d/%Y", "%d-%b-%y")[1 + grepl(pattern = "\\D{3}", x)]) 
#[1] "2017-06-11" "2017-06-11"