Відповіді:
Використовуйте 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
може бути вектором дат.
Пакет змащення дивовижний для подібних речей:
> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012
lubridate
пакет і намагався встановити цей і використаний рік (дата), але він дає день, а не рік, це працює лише у дати, формат яких "2015-05 -06 "?
Я знаю, що 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"))
Ви можете використовувати 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
об’єкт, який робить пакет із зоопарком непотрібним
У запитанні не було чітко зазначено, який результат очікується, але припускаючи, що для місяця ви хочете число місяця (січень = 1), а за рік ви хочете числовий чотиризначний рік, то припускаючи, що ми щойно запустили код у питанні:
cycle(date1)
## [1] 3
as.integer(date1)
## [1] 2012