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 ?yearmon
i ?strftime
po szczegóły - ta ostatnia wyjaśnia znaki zastępcze, których możesz użyć.
vector
n elementów, powiedzmy 1k dat w jednym vector
?
date1
może być również wektorem dat.
Pakiet lubridate jest niesamowite dla tego rodzaju rzeczy:
> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012
lubridate
pakiet 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 zoo
tutaj, ale znalazłem ten wątek googlujący w celu ts
znalezienia standardowego rozwiązania tego samego problemu. Pomyślałem więc, że dodam również zoo
odpowiedź 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
POSIXlt
przedmiot 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