从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