2016-11-20 117 views
0

我嘗試做在R上的日期格式轉換和我遇到這樣的問題:我原來的日期是轉換日期格式中的R

"Dec-2011" 

我要的是成爲

2011-12 

然後我試圖

as.Date("Dec-2011",format = "%b-%Y") 

它產生NA

我做了一些搜索,我發現,如果你鍵入

as.Date(gsub("^", "01-", "Dec-2011"), format="%d-%b-%Y") 

它會給你

2011-12-01 

我理解的功能「GSUB」在這裏所做的,這是替換所有的「^」在「01 - 」的「2011年12月」中。但是,正如您在「2011年12月」中看到的那樣,沒有「^」,我在考慮它應該是「01-」還是「-01」?我有點困惑。這個「gsub」真的在這裏做什麼?我應該如何在R中執行日期格式轉換?

+1

'paste'會更容易。 'paste0(「01-」,「Dec-2011」)' – akrun

+0

@akrun謝謝,這是有效的。更進一步,我正在查看包含「2011年12月」,「2008年5月」這樣的東西的整個專欄。我覺得as.Date(gsub(「^」,「01-」,「Dec-2011」),format =「%d-%b-%Y」)這個命令工作得很好,但我真的無法弄清楚爲什麼它有效,例如,我在「2011年12月」中沒有看到「^」,但似乎這個gsub函數仍然是正確的。你有關於它是如何工作的想法? – ftxx

+0

''yearmon''類可以不需要一天重複一年/一個月的對象。這些對象排序正確,不需要與任何一個月的任意一天相關聯,如第一個或最後一個。 '庫(動物園); as.yearmon(「Dec-2011」,format =「%b-%Y」)' –

回答

0

^是代表字符串開頭的元字符。在gsub示例中,pattern給出replacement(「01-」)的位置,因此它僅在開始時替換。假設,如果我們去掉^,它將取代

gsub("", "01-", "Dec-2011") 
#[1] "01-D01-e01-c01--01-201-001-101-101-" 

gsub("^", "01-", "Dec-2011") 
#[1] "01-Dec-2011" 

gsub意味着全球替代了 「01-」 之後的每一個字符,但我們可以sub

sub("", "01-", "Dec-2011") 
#[1] "01-Dec-2011" 

一次更換對於這種情況,它可能是更容易使用paste

paste0("01-", "Dec-2011") 
#[1] "01-Dec-2011"