2011-07-01 49 views
12

我已將csv與月份的前三個字母組成一個名爲month的列作爲char變量。例如: -將月份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) 

的工作一樣好。

如果你也有一個,整年列,你可以使用任何的轉換功能,使用適當的代碼(見?strftime

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

幾個選項使用:

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