2011-07-01 115 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 
相关问题