我得到了一个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