2012-03-17 15 views
106

私はyearmonオブジェクトを持っている:抽出月と年:: yearmonオブジェクト

require(zoo) 
date1 <- as.yearmon("Mar 2012", "%b %Y") 
class(date1) 
# [1] "yearmon" 

は、どのように私はこのから月と年を抽出することができますか?

month1 <- fn(date1) 
year1 <- fn(date1) 

私はfn()

答えて

134

がクラス"yearmon"のオブジェクトに対してformat()メソッドを使用します。ここで(!適切に作成された)あなたの例の日付は、必要に応じて

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

はその後、我々は、日付の部分を抽出することができます:

> format(date1, "%b") ## Month, char, abbreviated 
[1] "Mar" 
> format(date1, "%Y") ## Year with century 
[1] "2012" 
> format(date1, "%m") ## numeric month 
[1] "03" 

これらは文字として返されます。年または月を数値変数として使用する場合は、適切な場合はas.numeric()にラップします。

> as.numeric(format(date1, "%m")) 
[1] 3 
> as.numeric(format(date1, "%Y")) 
[1] 2012 

詳細については?yearmon?strftimeを参照してください - 後者は、使用できるプレースホルダ文字を説明します。

+4

%B、1月の場合は "3月"の代わりに "Mar"の場合 – PatrickT

+0

もしn要素の 'ベクトル 'があれば、1つの'ベクトル 'で1kの日付を言うことができますか? – Stophface

+0

@ChrisslはRの多くのように、 'date1'は日付のベクトルでもあります。 –

11

の代わりに使用する必要がありますどのような機能あなたはformatを使用することができます。

library(zoo) 
x <- as.yearmon(Sys.time()) 
format(x,"%b") 
[1] "Mar" 
format(x,"%Y") 
[1] "2012" 
+0

月を数字にするにはどうすればよいですか? (例:Marの場合は3) –

+1

@ user1169210 'format(x、"%m ")' – James

+0

@ user1169210私は私の答えでこれを説明しました。その月の 'as.numeric(format(x、"%m "))'を数値として使います。 –

97

lubridate packageは、この種のもののために素晴らしいです:

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

この回答に感謝します。 if(year(date1)> 2014){year(date1)< - year(date1) - 100} – Vincent

+1

これは間違いなく私の要件を満たすための最良の答えでした。 4000契約の開始日から1年間の作品。 – d8aninja

+0

@Ari B. Friedman私は現在、R 3.1.0を使用していますが、これは 'lubridate'パッケージをインストールしていて、年月日の代わりに使用するようにしましたが、これはフォーマットが"2015-05-06"? – KRU

15

私はOPがここzooを使用しているけど、私は同じ問題のための標準ts解決のためにグーグル、このスレッドを発見しました。だから私はzoo -freeの答えをtsに追加すると思った。

y = as.POSIXlt(date1)$year + 1900 # x$year : years since 1900 
m = as.POSIXlt(date1)$mon + 1  # x$mon : 0–11 
5

数字の4桁の数字を入力してください。

cycle(date1) 
## [1] 3 
as.integer(date1) 
## [1] 2012 
+1

これはRが動物園パッケージを不要にする便利な 'POSIXlt'オブジェクトを提供しているので、これは最善の答えです –

0

質問が予想されるが、月のあなたは月の数(1月= 1)にしたいと仮定して、必要な年間何のためにあるのか、出力を正確述べるませんでした:大きなベクトルの場合

# 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"))