2012-03-17 24 views

Trả lời

134

Sử dụng phương pháp format() cho các đối tượng của lớp "yearmon". Đây là ngày ví dụ của bạn (đúng tạo ra!)

date1 <- as.yearmon("Mar 2012", "%b %Y") 

Sau đó, chúng ta có thể trích xuất các phần cập nhật 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" 

Đây là những trở như ký tự. Nếu thích hợp, hãy bọc trong as.numeric() nếu bạn muốn tháng 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?strftime để biết chi tiết - sau này giải thích các nhân vật giữ chỗ bạn có thể sử dụng.

+4

% B cho tháng đầy đủ, tức là tháng 3 "thay vì" của "Mar" – PatrickT

+0

Làm cách nào để làm điều đó nếu có 'vectơ' của n phần tử, hãy cho biết 1k ngày trong một' vectơ'? – Stophface

+0

@Chrissl giống như nhiều R, 'date1' có thể là một vectơ của ngày tháng. –

11

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" 
+0

Làm cách nào để có được một tháng? (ví dụ 3 cho Mar?) –

+1

@ user1169210 'định dạng (x,"% m ")' – James

+0

@ user1169210 Tôi đã đề cập đến điều này trong câu trả lời của mình. Bạn muốn 'as.numeric (định dạng (x,"% m "))' cho tháng làm số ví dụ. –

97

Các lubridate package là tuyệt vời cho các loại hình điều:

> require(lubridate) 
> month(date1) 
[1] 3 
> year(date1) 
[1] 2012 
+2

Ha cảm ơn bạn vì câu trả lời này. Nó đặc biệt là nhịp đập các giải pháp khác khi bạn muốn làm một cái gì đó như nếu (năm (ngày1)> 2014) {năm (ngày1) <- năm (ngày1) - 100} – Vincent

+1

điều này chắc chắn là câu trả lời tốt nhất cho các yêu cầu của tôi năm mảnh trong số 4000 ngày bắt đầu của hợp đồng. – d8aninja

+0

@Ari B. Friedman tôi hiện đang sử dụng R 3.1.0 trong khi điều này không hỗ trợ gói 'lubridate' và đã cố gắng cài đặt và sử dụng năm này (ngày) nhưng nó cho ngày thay vì năm, điều này chỉ hoạt động vào những ngày có định dạng "2015-05-06"? – KRU

15

Tôi biết OP đang sử dụng zoo ở đây, nhưng tôi thấy chủ đề này googling cho một giải pháp tiêu chuẩn ts cho cùng một vấn đề. Vì vậy, tôi nghĩ tôi cũng sẽ thêm một câu trả lời miễn phí zoo cho 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")) 
5

Đố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 
+1

Đây là câu trả lời hay nhất, vì R đã cung cấp đối tượng 'POSIXlt' tiện dụng làm cho gói vườn thú không cần thiết –

0

Câu hỏi đặt ra không nêu chính xác những gì đầu ra được kỳ vọng nhưng giả định rằng trong tháng bạn muốn số tháng (tháng = 1) và năm tài chính bạn muốn số 4 chữ số năm sau đó giả định rằng chúng tôi vừa chạy mã trong câu hỏi:

cycle(date1) 
## [1] 3 
as.integer(date1) 
## [1] 2012 
Các vấn đề liên quan