我已经给了一个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"
法语等。