我已经获得了一个csv,其中一个名为month的列作为char变量,带有该月的前三个字母。 E.g:
"Jan", "Feb","Mar",..."Dec"
有没有办法将其转换为月份的数字表示形式,1到12,甚至是日期格式的类型?
答案 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