Извлечение месяца и года из объекта zoo :: yearmon - PullRequest
112 голосов
/ 17 марта 2012

У меня есть yearmon объект:

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

Как мне извлечь из этого месяц и год?

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

Какую функцию использовать вместо fn()

Ответы [ 6 ]

142 голосов
/ 17 марта 2012

Используйте метод 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 - последний объясняет символы-заполнители, которые можноиспользовать.

99 голосов
/ 17 марта 2012

смазочный пакет великолепен для такого рода вещей:

> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012
15 голосов
/ 04 сентября 2014

Я знаю, что OP использует zoo здесь, но я нашел этот поток, гуглящий для стандартного 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"))
12 голосов
/ 17 марта 2012

Вы можете использовать format:

library(zoo)
x <- as.yearmon(Sys.time())
format(x,"%b")
[1] "Mar"
format(x,"%Y")
[1] "2012"
5 голосов
/ 06 марта 2015

Для больших векторов:

y = as.POSIXlt(date1)$year + 1900    # x$year : years since 1900
m = as.POSIXlt(date1)$mon + 1        # x$mon : 0–11
0 голосов
/ 04 февраля 2017

В вопросе не было точно указано, какой результат ожидается, но предполагалось, что для месяца вам нужен номер месяца (январь = 1), а для года - цифра из 4 цифр, а затем предполагается, что мы просто запустили кодвопрос:

cycle(date1)
## [1] 3
as.integer(date1)
## [1] 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...