将月mmm转换为数字

Joh*_*ohn 21 datetime r

我已经给了一个csv,其中一个名为month的列作为char变量,带有该月的前三个字母.例如:

"Jan", "Feb","Mar",..."Dec"
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*mes 52

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

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


Jor*_*eys 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 
Run Code Online (Sandbox Code Playgroud)

grep构造负责处理大写的差异.如果不需要,

match(mm,month.abb) 
Run Code Online (Sandbox Code Playgroud)

工作得很好.

如果您还有一个日期和年份列,则可以使用适当的代码使用任何转换函数(另请参阅?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"
Run Code Online (Sandbox Code Playgroud)


小智 6

只需添加现有答案和问题中的评论:

readr::parse_date("20/DEZEMBRO/18","%d/%B/%y",locale=locale("pt"))
Run Code Online (Sandbox Code Playgroud)

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