r-将月份mmm转换为数字

  • 本文关键字:转换 数字 mmm datetime
  • 更新时间 :
  • 英文 :


我得到了一个csv,其中有一个名为month的列,作为一个包含月份前三个字母的char变量。例如:

"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"

仅添加到现有答案和问题中的注释:

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

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

几个选项使用:

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

相关内容

  • 没有找到相关文章

最新更新