Yanıtlar:
format()Sınıfın nesneleri için yöntemi kullanın "yearmon". İşte örnek tarihiniz (uygun şekilde oluşturulmuş!)
date1 <- as.yearmon("Mar 2012", "%b %Y")
Ardından tarih bölümlerini gerektiği gibi çıkarabiliriz:
> format(date1, "%b") ## Month, char, abbreviated
[1] "Mar"
> format(date1, "%Y") ## Year with century
[1] "2012"
> format(date1, "%m") ## numeric month
[1] "03"
Bunlar karakter olarak döndürülür. Uygun olduğu as.numeric()durumlarda, yılı veya sayısal ayı sayısal değişken olarak istiyorsanız , sarın , ör.
> as.numeric(format(date1, "%m"))
[1] 3
> as.numeric(format(date1, "%Y"))
[1] 2012
Bkz ?yearmonve ?strftimedetaylar için - ikincisi kullanabilirsiniz tutucu karakterleri açıklar.
vectorN tane öğeye sahip olsaydım bunu nasıl yaparım, diyelim ki 1k tarih bir arada vector?
date1, tarihlerin bir vektörü de olabilir.
Lubridate paketi bu tür bir şey için şaşırtıcı:
> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012
lubridatepaketi desteklemiyor ve bunu yüklemeyi denedim ve yılı (tarih) kullanıyorum, ancak yıl yerine gün veriyor bu yalnızca biçimi "2015-05 olan tarihlerde çalışıyor -06 "mı?
OP'nin zooburada kullandığını biliyorum , ancak bu konuyu tsaynı sorun için standart bir çözüm için googling buldum . Ben de zoo-free cevabı ekleyeceğimi düşündüm 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"))
Şunları kullanabilirsiniz format:
library(zoo)
x <- as.yearmon(Sys.time())
format(x,"%b")
[1] "Mar"
format(x,"%Y")
[1] "2012"
as.numeric(format(x, "%m"))Ayı örneğin sayısal olarak istiyorsunuz .
Büyük vektörler için:
y = as.POSIXlt(date1)$year + 1900 # x$year : years since 1900
m = as.POSIXlt(date1)$mon + 1 # x$mon : 0–11
POSIXlthayvanat bahçesi paketini gereksiz kılan kullanışlı nesneyi zaten sağlıyor
Soru, tam olarak hangi çıktının beklendiğini belirtmiyordu, ancak ay için ay numarasını (Ocak = 1) istediğinizi ve yıl için sayısal 4 basamaklı yılı istediğinizi ve ardından sorudaki kodu sadece çalıştırdığımızı varsayarak:
cycle(date1)
## [1] 3
as.integer(date1)
## [1] 2012