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 ?yearmon
ve ?strftime
detaylar için - ikincisi kullanabilirsiniz tutucu karakterleri açıklar.
vector
N 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
lubridate
paketi 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 zoo
burada kullandığını biliyorum , ancak bu konuyu ts
aynı 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
POSIXlt
hayvanat 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