2015-10-18 78 views
2

我有一個數據框,其中一列中的數據當前是「字符」,我需要將其更改爲「日期」,但日期是混合格式,所以我不能只使用as.Date()。列中也有空行。這裏是一個樣本的數據如何在同一列中標準化混合日期格式

> head(FarmersMkt$StartDate,n = 50) 
[1] "June "  "January " "05/01/2013 " "July "  "06/17/2013 " "05/04/2013 " ""   "06/27/2013 " 
[9] "June "  ""   "06/29/2013 " "06/06/2013 " ""    "May "  ""   ""   
[17] "05/11/2013 " "01/01/2013 " ""   "June "  "June "   "06/06/2013 " ""   ""   
[25] ""   "04/20/2013 " ""   ""   "05/11/2013 "  ""   "01/01/2013 " "01/01/2013 " 
[33] "06/06/2013 " "May "  "06/23/2013 " "01/01/2013 " "June 17, 2012 "  "June "  ""   ""   
[41] "06/06/2013 " ""   "May "  ""   ""    ""   "04/20/2013 " "01/01/2013 " 
[49] "07/13/2013 " "" 

所有的年份應該是2013年,日期可以是虛擬數據。如何將此列中的數據轉換爲日期格式?

+0

你想「六月」轉換爲什麼? – josliber

+2

堆棧溢出的好問題不僅指定了您擁有的數據,還指定了預期的輸出,因此如果出現這種情況,您應該編輯問題以說明只需要月/年。是從2013年的所有日期?否則,你如何知道「六月」中輸入的年份? – josliber

+0

我們可以使用虛擬日期和年份,因爲我只需要一個月,但我需要它與其他格式相同格式06/06/2013 –

回答

0

答案是,你不應該,即使有,告訴你是什麼格式它

你將如何interpres 06/08/2010 1)月8日2010 2)八月六號另一列2010

我總是會轉換爲標準格式,所以我可以對此進行計算然後存儲。如果我必須始終以不同的方式顯示它,那麼我會有另一列告訴我如何顯示它。

+0

我可以在新列中顯示它,但問題仍然存在,我如何將「六月「到YYYY-MM-DD格式? –

+0

年份沒有給出,你會使用哪一年? – easports611

+0

2013年的日期和日期可能是01 –

0

假設您知道觀察年份,並且您對「6月」到某些標準化內容的映射感到滿意,例如「2013-06-01」(設置一個月等於第一天),那麼我會採取的做法是生成兩個新列,第一列將「%m /%d /%Y」格式轉換爲標準日期,第二列將「%B」轉換爲標準日期。然後將它們連在一起。所以像這樣:

library(dplyr) 

tt <- data.frame(date = c("June", "05/23/2013")) 

tt %>% mutate(Date1 = as.Date(date, format = "%m/%d/%Y"), 
      Date2 = as.Date(paste0("01-",date,"-2013"), format = "%d-%B-%Y"), 
      newdate = ifelse(is.na(Date1), Date2, Date1) %>% as.Date(origin = "1970-01-01")) 
+0

如果您的語言環境未設置爲英語(或6月表示第6個月的任何其他語言),則這將返回「六月」的「NA」。嘗試'Sys.getlocale(category =「LC_ALL」)'確定。 – RHA

+0

我的區域設置爲'[1]「en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8」'@RHA但是,如「六月」,「五月」等的月份。 –

+0

謝謝@RHA!這是因爲尾部空間? @SGalleg,用'Date2 = as.Date(paste0(「01 - 」,date,「 - 2013」​​),format =「%d-%B - %Y」)替換第二行,'工作嗎? – Jim