Jawaban:
Gunakan format()
metode untuk objek kelas "yearmon"
. Ini contoh tanggal Anda (dibuat dengan benar!)
date1 <- as.yearmon("Mar 2012", "%b %Y")
Kemudian kita dapat mengekstrak bagian tanggal sesuai kebutuhan:
> format(date1, "%b") ## Month, char, abbreviated
[1] "Mar"
> format(date1, "%Y") ## Year with century
[1] "2012"
> format(date1, "%m") ## numeric month
[1] "03"
Ini dikembalikan sebagai karakter. Jika sesuai, masukkan as.numeric()
jika Anda ingin tahun atau bulan numerik sebagai variabel numerik, misalnya
> as.numeric(format(date1, "%m"))
[1] 3
> as.numeric(format(date1, "%Y"))
[1] 2012
Lihat ?yearmon
dan ?strftime
untuk detailnya - yang terakhir menjelaskan karakter placeholder yang dapat Anda gunakan.
vector
dari n elemen, katakanlah 1k tanggal dalam satu vector
?
date1
bisa menjadi vektor tanggal.
The paket lubridate menakjubkan untuk hal semacam ini:
> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012
lubridate
paket dan mencoba menginstal ini dan tahun yang digunakan (tanggal) tetapi memberikan hari dan bukan tahun apakah ini hanya berfungsi pada tanggal yang formatnya adalah "2015-05 -06 "?
Saya tahu OP digunakan di zoo
sini, tetapi saya menemukan utas ini mencari ts
solusi standar untuk masalah yang sama di Google. Jadi saya pikir saya akan menambahkan zoo
jawaban -gratis ts
juga.
# 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"))
Anda dapat menggunakan format
:
library(zoo)
x <- as.yearmon(Sys.time())
format(x,"%b")
[1] "Mar"
format(x,"%Y")
[1] "2012"
as.numeric(format(x, "%m"))
bulan sebagai angka misalnya.
Untuk vektor besar:
y = as.POSIXlt(date1)$year + 1900 # x$year : years since 1900
m = as.POSIXlt(date1)$mon + 1 # x$mon : 0–11
POSIXlt
objek praktis yang membuat paket kebun binatang tidak diperlukan
Pertanyaan tidak menyatakan dengan tepat keluaran apa yang diharapkan tetapi dengan asumsi bahwa untuk bulan Anda menginginkan nomor bulan (Januari = 1) dan untuk tahun Anda menginginkan tahun numerik 4 digit, maka asumsikan bahwa kami baru saja menjalankan kode di pertanyaan:
cycle(date1)
## [1] 3
as.integer(date1)
## [1] 2012