2011-07-01 8 views
12

月の最初の3文字をchar変数として月と呼ばれる列を持つcsvが与えられました。例えば:月をmmmに変換する

"Jan", "Feb","Mar",..."Dec" 

1〜12月の数値表現にこれを変換する、または日付の形式であってもタイプする方法はありますか?

+2

エクストラクレジット:あなたの月の略語が英語でない場合は動作します答えを与えます! (例えば、 "Jan"、 "Fev"、 "Mar"、 "Avr"、 "Mai"など)[ヒント:システムロケールを一時的に切り替えることで、 'as.Date'を' %b'形式...] –

答えて

31

使用matchと事前に定義されたベクトルmonth.abb

tst <- c("Jan","Mar","Dec") 
match(tst,month.abb) 
[1] 1 3 12 
13

あなたはに対してチェックする組み込みのベクトルmonth.abbを使用することができます数、例えばへの変換時:

mm <- c("Jan","Dec","jan","Mar","Apr") 

sapply(mm,function(x) grep(paste("(?i)",x,sep=""),month.abb)) 
Jan Dec jan Mar Apr 
    1 12 1 3 4 

grepの構築物が取り大文字と小文字の違いを気にする。それが必要でない場合は、

match(mm,month.abb) 

のように機能します。あなたはまた、日、年の列を持っている場合は

、あなたが適切なコードを使用して、変換関数のいずれかを使用することができます例えば

mm <- c("Jan","Dec","jan","Mar","Apr") 
year <- c(1998,1998,1999,1999,1999) 
day <- c(4,10,3,16,25) 

dates <- paste(year,mm,day,sep="-") 

strptime(dates,format="%Y-%b-%d") 
[1] "1998-01-04" "1998-12-10" "1999-01-03" "1999-03-16" "1999-04-25" 
+0

ありがとうJoris、これも便利です。私はそれを使って時系列の実際の日付を取得するために列を貼り付ける必要があります。 – John

2

オプションのカップルが使用

(も?strftime参照) :

vec <- c("Jan","Dec","Jan","Apr") 

> Months <- 1:12 
> names(Months) <- month.abb 
> unname(Months[vec]) 
[1] 1 12 1 4 

および/または

> match(vec, month.abb) 
[1] 1 12 1 4 
関連する問題