Odpowiedzi:
Użyj format()metody dla obiektów klasy "yearmon". Oto Twoja przykładowa data (poprawnie utworzona!)
date1 <- as.yearmon("Mar 2012", "%b %Y")
Następnie możemy wyodrębnić części daty zgodnie z wymaganiami:
> format(date1, "%b") ## Month, char, abbreviated
[1] "Mar"
> format(date1, "%Y") ## Year with century
[1] "2012"
> format(date1, "%m") ## numeric month
[1] "03"
Są one zwracane jako znaki. W razie potrzeby zawiń, as.numeric()jeśli chcesz, aby rok lub miesiąc był zmienną numeryczną, np
> as.numeric(format(date1, "%m"))
[1] 3
> as.numeric(format(date1, "%Y"))
[1] 2012
Zobacz ?yearmoni ?strftimepo szczegóły - ta ostatnia wyjaśnia znaki zastępcze, których możesz użyć.
vectorn elementów, powiedzmy 1k dat w jednym vector?
date1może być również wektorem dat.
Pakiet lubridate jest niesamowite dla tego rodzaju rzeczy:
> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012
lubridatepakiet nie obsługuje i próbowałem zainstalować ten i używany rok (datę), ale podaje dzień zamiast roku, działa to tylko w przypadku dat, których format to „2015-05 -06 "?
Wiem, że OP używa zootutaj, ale znalazłem ten wątek googlujący w celu tsznalezienia standardowego rozwiązania tego samego problemu. Pomyślałem więc, że dodam również zooodpowiedź bezpłatną 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"))
Możesz użyć format:
library(zoo)
x <- as.yearmon(Sys.time())
format(x,"%b")
[1] "Mar"
format(x,"%Y")
[1] "2012"
as.numeric(format(x, "%m"))aby miesiąc był liczbą.
W przypadku dużych wektorów:
y = as.POSIXlt(date1)$year + 1900 # x$year : years since 1900
m = as.POSIXlt(date1)$mon + 1 # x$mon : 0–11
POSIXltprzedmiot sprawia, że pakiet zoo niepotrzebny
Pytanie nie określało dokładnie, jakiego wyniku oczekuje się, ale zakładając, że dla miesiąca chcesz numer miesiąca (styczeń = 1), a dla roku chcesz numeryczny 4-cyfrowy rok, zakładając, że właśnie uruchomiliśmy kod w pytaniu:
cycle(date1)
## [1] 3
as.integer(date1)
## [1] 2012