parse_date_time混合日期和月份
我在我的数据中有几列使用parse_date_time
,这些列有多种日期格式。例如,一列可能有日期格式"%d-%b-%y"
和"%m/%d/%Y"
。parse_date_time混合日期和月份
因此,"06/11/2017"
("%m/%d/%Y"
)和"11-Jun-17"
("%d-%b-%y"
)对应于同一日期“2017年6月11日”("%Y-%m-%d"
)
我使用lubridate::parse_date_time
解析的日期,其中不同的日期格式可以是在orders
参数指定:
x <- c("06-11-2017", "11-Jun-17")
parse_date_time(x, orders = c("%d-%b-%y", "%m/%d/%Y"), locale = "eng")
# [1] "2017-11-06 UTC" "2017-06-11 UTC"
虽然这应该吐出两个日期为"2017-06-11"
,它不解析月份和日期正确的"%m/%d/%Y"
日期,通过改变检查月:
x <- c("05-11-2017", "11-Jun-17")
parse_date_time(x, orders = c("%d-%b-%y", "%m/%d/%Y"), locale = "eng")
# [1] "2017-11-05 UTC" "2017-06-11 UTC"
的05
应该被解析为%m
,但事实并非如此。
我对parse_date_time
的调查显示有错误,我认为这是错误。但是,我想知道我能做些什么来获得我需要的结果?
更新:这里是我正在使用的数据的一个例子。通过添加“精确=真”它修复了我的问题。
测试$ Transmission.date [1] “22-FEB-16”, “10-MAR-16”, “10-MAR-16”, “10-MAR-16”, “15-JAN-16” “15-Jan-16”“15-Jan-16”“15-Jan-16”“15-Jan-16”“15-Jan-16”“4/6/2016” [12]“4/6 “2016/04/26”“2016/04/26”“2016/04/14”“2016/12/14”“2016/12/30”“2016/12/30”“2016/04/14”“4/12/2016/04/12“”2016/04/12“”2016/12/14“ [23]”2016/12/14“”2016/04/24“”2016/04/24“”4 “2016/04/24”“2016/04/14”“2016/04/24”“2016/04/24”“2016/04/24”“2016/04/24”“2016/04/24”“4/2016年4月“ ”[4]“2016年4月4日”“2016年4月4日” test $ Buyer.RFQ.Close.Date [1]“25-Feb-16”“10-三月-16” “10-Mar-16”“10-Mar-16”“27-Jan-16”“27-Jan-16”“27-Jan-16”“27-Jan-16”“27-Jan-16”“ 27-Jan-16“”5/4/2016“ [12]“2016/05/24”“2016/05/25”“2016/05/25”“2016/10/25”“2016/10/10”“2016/10/10”“5/10/2016”“5/10 “2016/10/20”“2016/10/10”“2016/10/10”“2016/10/10”“2016/10/10” [23]“2016/10/10”“2016/04/28”“ 2016/05/25“”2016/05/25“”2016/05/25“”2016/05/25“”2016/05/25“”2016/5/2“”2016/5/2“”4/28/2016“”5/2/2016“ [34]”2016/4/28“”2016/5/2“ test $ RFQ.close.date [1]”25-Feb-16“” 10-Mar-16“”10-Mar-16“”10-Mar-16“”27-Jan-16“”27-Jan-16“”27-Jan-16“”27-Jan-16“”27 -Jan-16“”2016-1-1“2016-4-22” [12]“2016/4/22”“2016/04/22”“2016/4/22”“2016/5/3” “”2016/05/23“”2016/05/23“”2016/05/23“”2016/05/23“ [5] 2016/4/28“”“”“2016/04/28”“”“2016/04/28”“2016/04/28”“2016/04/28” “2016/4/28”“”“2016/4/28” [34]“”“2016/4/28”
如果只有两种不同的格式,则可以在基本R中相对容易地完成。如果可以有更多的格式,其他方法将是必要的
x = c("06/11/2017", "11-Jun-17")
as.Date(x, format = c("%m/%d/%Y", "%d-%b-%y")[1 + grepl(pattern = "\\D{3}", x)])
#[1] "2017-06-11" "2017-06-11"
@ alexb523似乎是一个错误。我无法解析它(它是或者)。我甚至尝试过''parse_date_time(x,c(“%m /%d /%Y”,“%d-%m-%Y”),exact = TRUE)你可以看看'select_formats',但我从来没有用过它 – CPak
你应该添加'library(wherever_that_function_comes_from)'。 – Frank
我认为这是一个类似于我几年前报告的错误:[使用parse_date_time解析日期格式为dmy和dmY](https://*.com/questions/19127095/parse-dates-in-format- dmy-together-with-dmy-using-parse-date-time-in-package-lub),其中'orders'的某些组合运行不好。无效:'parse_date_time(“06-11-2017”,orders = c(“dby”,“mdY”),locale =“eng”)''。 Works:'parse_date_time(“06-11-2017”,orders =“mdY”,locale =“eng”)'; 'parse_date_time(c(“06-11-2017”,“07-06-11”),orders = c(“mdY”,“ymd”),locale =“eng”)' – Henrik