2016-11-20 99 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"