Mam yearmon
obiekt:
require(zoo)
date1 <- as.yearmon("Mar 2012", "%b %Y")
class(date1)
# [1] "yearmon"
Jak mogę z tego wyodrębnić miesiąc i rok?
month1 <- fn(date1)
year1 <- fn(date1)
Jakiej funkcji powinienem użyć zamiast fn()
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 jednymvector
?date1
może być również wektorem dat.Pakiet lubridate jest niesamowite dla tego rodzaju rzeczy:
źródło
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 celuts
znalezienia standardowego rozwiązania tego samego problemu. Pomyślałem więc, że dodam równieżzoo
odpowiedź bezpłatnąts
.źródło
Możesz użyć
format
:źródło
as.numeric(format(x, "%m"))
aby miesiąc był liczbą.W przypadku dużych wektorów:
źródło
POSIXlt
przedmiot sprawia, że pakiet zoo niepotrzebnyPytanie 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:
źródło
Mając podobny problem z danymi od 1800 do teraz, zadziałało to dla mnie:
źródło