将月mmm转换为数字

时间:2011-07-01 14:23:56

标签: r datetime

我已经获得了一个csv,其中一个名为month的列作为char变量,带有该月的前三个字母。 E.g:

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

有没有办法将其转换为月份的数字表示形式,1到12,甚至是日期格式的类型?

4 个答案:

答案 0 :(得分:48)

使用match和预定义的向量month.abb

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

答案 1 :(得分:18)

您可以使用内置向量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"

答案 2 :(得分:3)

只需在问题中添加现有答案和评论即可

readr::parse_date("20/DEZEMBRO/18","%d/%B/%y",locale=locale("pt"))

结果日期格式为"2018-12-20"locale("pt")用于葡萄牙语,在巴西使用,可以"es"用于西班牙语,"fr"用于法语等。

答案 3 :(得分: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