2015-12-16 35 views
0

我正在將我正在從網頁上抓取的數據轉換爲數據表以供進一步處理。麻煩的是我不能完全弄清楚如何轉換日期。他們有兩種格式之一(我將使用的例子,因爲我不知道怎樣的方式,很清楚概括爲您):在R中,如何轉換具有附加後綴的日期的日期字符串表示形式?

"November 11th" "December 1st (2015)"

我已閱讀文檔as.Dateas.POSIXctas.POSIXlt我無法設法編寫一貫處理這些情況的格式字符串。後綴後綴似乎總是會格式化字符串,特別是在後一種情況下。幸運的是,我認爲我可以一直預測我將在任何時候獲得哪個版本,所以如果我必須編寫兩個不同的對話函數/格式字符串,那很酷。

+0

對多種日期格式沒有單一的功能支持(除了處理YYYY-MM-DD和YYYY/MM/DD。我認爲'lubridate'軟件包有一些進一步的功能可以自動檢測,但我懷疑它不適用於這些格式。但是,您可以查看該代碼以獲取構建自己策略的想法。 –

+0

請注意'as.Date(「2015年12月1日」,「%B%dst(%Y)」)'適用於您的第二個,但結尾「nd」和「rd」不會被識別爲'你可以用'gsub'-pattern'stnd | rd | th'來剝離可能的尾部2字母組合。 –

+0

如@ 42建議的,在解析之前嘗試格式化字符串(使用'strptime ',...)我也會刪除括號或其他標點符號。 –

回答

2

您可以使用subregex捕捉關鍵詞/號碼,與as.Date合併轉換爲日期:

對於第一種格式,添加2015爲一年:

as.Date(paste0(sub("(\\w+)\\s(\\d+).+", "\\1-\\2", d1), "-2015"), format="%B-%d-%Y") 
[1] "2015-11-11" 

對於第二格式

as.Date(sub("(\\w+)\\s(\\d+).+\\s\\((\\d{4})\\).*", "\\1-\\2-\\3", d2), format="%B-%d-%Y") 
[1] "2015-12-01" 

數據:

d1 <- "November 11th" 
d2 <- "December 1st (2015)"