Câu trả lời:
Sử dụng format()
phương thức cho các đối tượng của lớp "yearmon"
. Đây là ngày mẫu của bạn (được tạo đúng cách!)
date1 <- as.yearmon("Mar 2012", "%b %Y")
Sau đó, chúng tôi có thể trích xuất các phần ngày theo yêu cầu:
> format(date1, "%b") ## Month, char, abbreviated
[1] "Mar"
> format(date1, "%Y") ## Year with century
[1] "2012"
> format(date1, "%m") ## numeric month
[1] "03"
Chúng được trả về dưới dạng ký tự. Nếu thích hợp, hãy kết thúc as.numeric()
nếu bạn muốn năm hoặc tháng số dưới dạng biến số, ví dụ:
> as.numeric(format(date1, "%m"))
[1] 3
> as.numeric(format(date1, "%Y"))
[1] 2012
Xem ?yearmon
và ?strftime
để biết chi tiết - phần sau giải thích các ký tự giữ chỗ bạn có thể sử dụng.
vector
trong n phần tử, giả sử 1k ngày trong một vector
?
date1
cũng có thể là một vectơ ngày tháng.
Các gói lubridate là tuyệt vời cho các loại hình điều:
> require(lubridate)
> month(date1)
[1] 3
> year(date1)
[1] 2012
lubridate
gói này không hỗ trợ và đã thử cài đặt này và đã sử dụng năm (ngày) nhưng nó cung cấp ngày thay vì năm, điều này chỉ hoạt động trên các ngày có định dạng là "2015-05 -06 ”?
Tôi biết OP đang sử dụng zoo
ở đây, nhưng tôi đã tìm thấy googling luồng này cho một ts
giải pháp tiêu chuẩn cho cùng một vấn đề. Vì vậy, tôi nghĩ rằng tôi cũng sẽ thêm một zoo
câu trả lời miễn phí 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"))
Bạn có thể sử dụng format
:
library(zoo)
x <- as.yearmon(Sys.time())
format(x,"%b")
[1] "Mar"
format(x,"%Y")
[1] "2012"
as.numeric(format(x, "%m"))
Ví dụ, bạn muốn tháng ở dạng số.
Đối với vectơ lớn:
y = as.POSIXlt(date1)$year + 1900 # x$year : years since 1900
m = as.POSIXlt(date1)$mon + 1 # x$mon : 0–11
POSIXlt
đối tượng đó làm cho gói vườn thú không cần thiết
Câu hỏi không nêu chính xác sản lượng dự kiến là bao nhiêu nhưng giả sử rằng tháng bạn muốn số tháng (tháng 1 = 1) và cho năm bạn muốn năm 4 chữ số thì giả sử rằng chúng ta vừa chạy mã trong câu hỏi:
cycle(date1)
## [1] 3
as.integer(date1)
## [1] 2012