我已将csv与月份的前三个字母组成一个名为month的列作为char变量。例如: -将月份mmm转换为数字
"Jan", "Feb","Mar",..."Dec"
有没有办法将其转换为一个月的数字表示,1到12,甚至一个类型,它是一个日期格式?
我已将csv与月份的前三个字母组成一个名为month的列作为char变量。例如: -将月份mmm转换为数字
"Jan", "Feb","Mar",..."Dec"
有没有办法将其转换为一个月的数字表示,1到12,甚至一个类型,它是一个日期格式?
使用match
和预定义的矢量month.abb
:
tst <- c("Jan","Mar","Dec")
match(tst,month.abb)
[1] 1 3 12
您可以使用内置的矢量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"
谢谢Joris,这也很有用。我将不得不粘贴该列以获取与它的时间序列的实际日期。 – John
几个选项使用:
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
附加题:给你的,如果每个月的缩写不是英文问题的解答! (例如“Jan”,“Fev”,“Mar”,“Avr”,“Mai”,...)[提示:你可以通过临时切换系统区域并使用'as.Date'和' %b'格式...] –