正则表达式 – 将dd/mm/yy和dd/mm/yyyy转换为日期
发布时间:2020-12-14 06:32:05 所属栏目:百科 来源:网络整理
导读:我有一些角色向量,其中包含各种格式的日期 dates - c("23/11/12","20/10/2012","22/10/2012","23/11/12") 我想将这些转换为日期.我从lubridate包中尝试过非常好的dmy,但这不起作用: dmy(dates)[1] "0012-11-23 UTC" "2012-10-20 UTC" "2012-10-22 UTC" "001
我有一些角色向量,其中包含各种格式的日期
dates <- c("23/11/12","20/10/2012","22/10/2012","23/11/12") 我想将这些转换为日期.我从lubridate包中尝试过非常好的dmy,但这不起作用: dmy(dates) [1] "0012-11-23 UTC" "2012-10-20 UTC" "2012-10-22 UTC" "0012-11-23 UTC" 它将/ 12年视为0012. 所以我现在尝试使用正则表达式来选择每种类型,并使用as.Date()单独转换为日期.但是我试图选择dd / mm / yy的正则表达式不起作用. dates[grep('[0-9]{2}/[0-9]{2}/[0-9]{2,2}',dates)] 回报 [1] "23/11/12" "20/10/2012" "22/10/2012" "23/11/12" 我认为{2,2}应该得到正好2个数字,而不是所有数字.我不是很擅长正则表达,所以任何帮助将不胜感激. 谢谢 编辑 我实际拥有的是三种不同类型的日期,如下所示 dates <- c("23-Jul-2013","23/11/12","23/11/12") 我想将这些转换为日期 parse_date_time(dates,c('dmy')) 给我 [1] "2013-07-23" "0012-11-23" "2012-10-20" "2012-10-22" "0012-11-23" 然而,这是错误的,0012应该是2012年.我想(一个相当简单的)解决方案. 我现在拥有的一个解决方案(感谢@plannapus)是使用正则表达式 asDateRegex <- function(dates,#selects strings from the vector dates using regexes and converts these to Dates regexes = c('[0-9]{2}/[0-9]{2}/[0-9]{4}',#dd/mm/yyyy '[0-9]{2}/[0-9]{2}/[0-9]{2}$',#dd/mm/yy '[0-9]{2}-[[:alpha:]]{3}-[0-9]{4}'),#dd-mon-yyyy orders = 'dmy',...){ require(lubridate) new_dates <- as.Date(rep(NA,length(dates))) for(reg in regexes){ new_dates[grep(reg,dates)] <- as.Date(parse_date_time(dates[grep(reg,dates)],order = orders)) } new_dates } asDateRegex (dates) [1] "2012-10-20" "2013-07-23" "2012-11-23" "2012-10-22" "2012-11-23" 但这不是很优雅.更好的解决方案?
你可以使用lubridate的parse_date_time:
some.dates <- c("23/11/12","23/11/12") parse_date_time(some.dates,c('dmy')) [1] "2012-11-23 UTC" "2012-10-20 UTC" "2012-10-22 UTC" "2012-11-23 UTC" 但是,请注意格式的顺序很重要: some.dates <- c("20/10/2012",c('dmY','dmy')) [1] "2012-10-20 UTC" "2012-11-23 UTC" "2012-10-22 UTC" "2012-11-23 UTC" 编辑 内部parse_date_time使用guess_formats(我想使用一些正则表达式): guess_formats(some.dates,c('dmy')) dmy dmy dmy dmy "%d/%m/%Y" "%d/%m/%y" "%d/%m/%Y" "%d/%m/%y" 如评论中所述,您可以像这样使用parse_date_time: as.Date(dates,format = guess_formats(dates,c('dmy'))) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |