Ответы:
Используйте 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
для деталей - последняя объясняет символы - заполнители , которые можно использовать.
vector
n элементов, скажем, 1k дат в одном vector
?
date1
может быть вектором дат.
Пакет lubridate отлично подходит для таких вещей:
> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012
lubridate
пакет не поддерживает , и попытался установить его и использовал год (дату), но он дает день вместо года, это работает только с датами в формате «2015-05 -06 "?
Я знаю, что zoo
здесь используется OP , но я нашел этот поток в поиске стандартного 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"
as.numeric(format(x, "%m"))
Например, вы хотите, чтобы месяц был числовым.
Для больших векторов:
y = as.POSIXlt(date1)$year + 1900 # x$year : years since 1900
m = as.POSIXlt(date1)$mon + 1 # x$mon : 0–11
POSIXlt
объект, который делает ненужным пакет zoo
В вопросе не указывалось, какой именно результат ожидается, но предполагалось, что для месяца вам нужен номер месяца (январь = 1), а для года вам нужен числовой 4-значный год, а затем предполагая, что мы только что запустили код в вопросе:
cycle(date1)
## [1] 3
as.integer(date1)
## [1] 2012