У меня есть объект yearmon
:
require(zoo)
date1 <- as.yearmon("Mar 2012", "%b %Y")
class(date1)
# [1] "yearmon"
Как я могу извлечь из этого месяц и год?
month1 <- fn(date1)
year1 <- fn(date1)
Какую функцию следует использовать вместо fn()
У меня есть объект yearmon
:
require(zoo)
date1 <- as.yearmon("Mar 2012", "%b %Y")
class(date1)
# [1] "yearmon"
Как я могу извлечь из этого месяц и год?
month1 <- fn(date1)
year1 <- fn(date1)
Какую функцию следует использовать вместо fn()
Используйте метод format()
для объектов класса "yearmon"
. Вот ваш пример даты (правильно создан!)
date1 <- as.yearmon("Mar 2012", "%b %Y")
Затем мы можем извлечь детали даты по мере необходимости:
> format(date1, "%b") ## Month, char, abbreviated
[1] "Mar"
> format(date1, "%Y") ## Year with century
[1] "2012"
> format(date1, "%m") ## numeric month
[1] "03"
Они возвращаются как символы. Если необходимо, оберните 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
здесь, но я нашел этот поток googling для стандартного решения ts
для той же проблемы. Поэтому я подумал, что добавить zoo
-бесплатный ответ для ts
.
# 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"
При больших векторах:
y = as.POSIXlt(date1)$year + 1900 # x$year : years since 1900
m = as.POSIXlt(date1)$mon + 1 # x$mon : 0–11
В вопросе не указано точно, какой результат ожидается, но предполагая, что в течение месяца вы хотите указать номер месяца (январь = 1) и за год, который вам нужен, числовой четырехзначный год, тогда предполагается, что мы только что запустили код в вопрос:
cycle(date1)
## [1] 3
as.integer(date1)
## [1] 2012