从zoo :: yearmon对象中提取月份和年份

我有一个yearmon对象:

 require(zoo) date1 <- as.yearmon("Mar 2012", "%b %Y") class(date1) # [1] "yearmon" 

我如何从中提取月份和年份?

 month1 <- fn(date1) year1 <- fn(date1) 

我应该使用什么函数来代替fn()

format()方法用于"yearmon"类的对象。 这是你的例子date(正确创build!)

 date1 <- as.yearmon("Mar 2012", "%b %Y") 

然后我们可以根据需要提取date部分:

 > format(date1, "%b") ## Month, char, abbreviated [1] "Mar" > format(date1, "%Y") ## Year with century [1] "2012" > format(date1, "%m") ## numeric month [1] "03" 

这些返回为字符。 在适当的情况下,如果你想将年份或数字月份作为一个数字variables来包装as.numeric() ,例如

 > as.numeric(format(date1, "%m")) [1] 3 > as.numeric(format(date1, "%Y")) [1] 2012 

有关详细信息,请参阅?yearmon?strftime – 后者说明您可以使用的占位符字符。

lubridate包是惊人的这种事情:

 > require(lubridate) > month(date1) [1] 3 > year(date1) [1] 2012 

我知道OP在这里使用zoo ,但我发现这个线程search一个标准的ts解决scheme同样的问题。 所以我想我也会为ts添加一个zoo免费的答案。

 # create an example Date date_1 <- as.Date("1990-01-01") # extract year as.numeric(format(date_1, "%Y")) # extract month as.numeric(format(date_1, "%m")) 

你可以使用format

 library(zoo) x <- as.yearmon(Sys.time()) format(x,"%b") [1] "Mar" format(x,"%Y") [1] "2012" 

对于大型vector:

 y = as.POSIXlt(date1)$year + 1900 # x$year : years since 1900 m = as.POSIXlt(date1)$mon + 1 # x$mon : 0–11 

这个问题并没有明确指出预期的产出,而是假定你想要的月份数(1月= 1)和你想要的数字4个数字年的年份,然后假设我们刚刚在问题中运行代码:

 cycle(date1) ## [1] 3 as.integer(date1) ## [1] 2012